Partage
  • Partager sur Facebook
  • Partager sur Twitter

Argument en constructeur

Sujet résolu
    12 février 2013 à 21:26:28

    Bonjour à vous !

    Je veux juste avoir deux classes sur deux fichiers différents et passer en argument self dans l'init de ma second classe. Enfin un petit code sera plus explicite:

    #Game.py
    
    from Window import *
    from Toast import *
    
    class Game :
        
        def __init__(self) :
            self.username = "Player"
            self.window = Window(self)
            
    
        def get_username(self):
            return self.username
    
    
    
    Game()
    



    et le second:

    #Window.py
    
    from tkinter import *
    from Game import *
    
    class Window :
        def __init__(self, game) :
            self.window= Tk()
            self.window.geometry(str(1120)+"x"+str(600))



    les deux fichiers sont dans le même dossier.

    Et j'ai le droit à cette erreur:

    Traceback (most recent call last):
      File "E:\Users\a\Desktop\Toast\Game.py", line 1, in <module>
        from Window import *
      File "E:\Users\a\Desktop\Toast\Window.py", line 2, in <module>
    from Game import * File "E:\Users\a\Desktop\Toast\Game.py", line 16, in <module>
    Game() File "E:\Users\a\Desktop\Toast\Game.py", line 8, in __init__
    self.window = Window(self) NameError: global name 'Window' is not defined

    Voilà merci d'avance de vos réponses même si le problème est basique je suis perdu..


    -
    Edité par Bug 13 juin 2017 à 21:38:23

    • Partager sur Facebook
    • Partager sur Twitter
      13 février 2013 à 1:06:54

      Tu ne peux pas importer ces modules l'un dans l'autre comme ça, ça crée une dépendance cyclique.

      (D'ailleurs, tu n'as même pas besoin d'importer "Game" dans le module "Window".)

      Contrairement à C++, Java ou même Perl, ce n'est pas une pratique courante en Python de coller des classes dans des modules différents : un module est un "thème", un tout cohérent, qui contient généralement plusieurs classes permettant de faire des actions en relation les unes avec les autres (regarde ceux de la bibliothèque standard, par exemple...).

      Tu ferais mieux de coller tes deux classes dans le même module, sinon tu perds tous les avantages des namespaces en Python.

      -
      Edité par nohar 13 février 2013 à 2:06:44

      • Partager sur Facebook
      • Partager sur Twitter
      Zeste de Savoir, le site qui en a dans le citron !

      Argument en constructeur

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown