L'accès instance de classe à partir d'un fichier dans un autre fichier?
J'ai deux fichiers, les deux sont dans le même projet (partie d'un site web grattage cadre). Fichier1 traite les éléments qui sont générés par Fichier2. Dans Fichier2 j'ai une fonction qui imprime quelques notions de statistiques sur le processus (compte de la façon dont de nombreux éléments ont été générés, etc). J'ai compte dans Fichier1 que je voudrais imprimer avec les stats de Fichier1, mais je suis pas sûr de savoir comment le faire. Jetez un oeil à l'exemple de code.
FICHIER 1:
class Class1(object):
def __init__(self):
self.stats = counter("name") #This is the instance that I'd like to use in File2
self.stats.count = 10
class counter:
def __init__(self, name):
self.name = name
self.count = 0
def __string__(self):
message = self.name + self.count
return message
FICHIER 2: (c'est ce que j'aimerais faire)
from project import file1 # this import returns no error
def stats():
print file1.Class1.stats # This is where I'm trying to get the instance created in Class1 of File2.
#print file1.Class1.stats.count # Furthermore, it would be nice if this worked too.
ERREUR:
exceptions.AttributeError: type object 'Class1' has no attribute 'stats'
Je sais que les deux fichiers sont en cours d'exécution, donc ne les 'stats' exemple de la "compteur" de la classe, parce que les autres méthodes étant imprimées lors de l'exécution du projet (c'est juste une dépouillé exemple. Ce que je fais mal? Est-ce possible de le faire?
OriginalL'auteur alukach | 2011-09-02
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas de travailler parce que vous n'avez jamais instancier
Class1
.__init__
est appelée lorsque l'Class1
est instancié doncClass1.stats
est réglé.Vous avez 2 options ici.
Class1
dans le fichier 2 en quelque sorte.Class1
qui retourne le nombre propriété.OriginalL'auteur Jonathan Liuti
Dans Fichier1, créer une instance de Class1, et l'utiliser pour obtenir le nombre.
Dans fichier2, utilisez l'instance créée:
OriginalL'auteur Lewis Ellis
Votre terminologie est un peu mélangé. "les deux fichiers sont en cours d'exécution, donc ne les 'stats' exemple de la "compteur" de classe" -
stats
est un attribut de objets de lacounter
classe. Si vous souhaitez un décompte du nombre d'instances de la classe sont créés, vous devez utiliser un attribut de classe qui est quelque chose qui est lié à votre classe, et non une instance de celle-ci.Alors il peut être utilisé comme,
Noter que la deuxième fois que vous
print foo
il a mis à jour le décompte, mais leid
reste le même, c'est parce quecount
est un attribut de classe, maisid
est un attribut de l'objet (avec ce code), la création debar
n'affecte pas laid
defoo
, mais il incrémenteCounter.count
.OriginalL'auteur Roshan Mathews