Access class-Instanz aus einer Datei in eine andere Datei?
Ich habe zwei Dateien, die beide im selben Projekt (Teil einer web-scraping-framework). Datei1 verarbeitet die Elemente, die von Datei2. In Datei2 ich habe eine Funktion, druckt einige grundlegende Statistiken über die Prozesse (zählt, wie viele Objekte erzeugt wurden, etc). Ich habe zählt die in Datei1, ich würde auch gerne drucken mit den stats aus Datei1, bin aber unsicher, wie das zu tun. Werfen Sie einen Blick auf den Beispiel-code.
DATEI 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
DATEI 2: (dies ist, was ich gerne machen würde)
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.
FEHLER:
exceptions.AttributeError: type object 'Class1' has no attribute 'stats'
Weiß ich, dass beide Dateien ausgeführt werden, somit also nicht die 'stats' Instanz von 'counter' Klasse, weil Sie andere Methoden werden ausgedruckt, wenn das Projekt ausgeführt wird (dies ist nur eine abgespeckte Beispiel. Was mache ich hier falsch? Ist dies möglich?
InformationsquelleAutor alukach | 2011-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht arbeiten, weil Sie nie instanziieren
Class1
.__init__
wird aufgerufen, wenn derClass1
instanziiert wird, soClass1.stats
eingestellt ist.Haben Sie 2 Möglichkeiten hier.
Class1
in Datei 2 irgendwie.Class1
, gibt die count-Eigenschaft.InformationsquelleAutor Jonathan Liuti
In Datei1, erstellen Sie eine Instanz von Class1, und verwenden Sie diese, um die Anzahl.
In Datei2 benutzen die erstellte Instanz:
InformationsquelleAutor Lewis Ellis
Ihre Terminologie ist ein wenig gemischt. "beide Dateien ausgeführt werden, somit also nicht die 'stats' Instanz von 'counter' - Klasse" -
stats
ist ein Attribut von Objekte dercounter
Klasse. Wenn Sie zählen möchten, wie viele Instanzen der Klasse erstellt werden, sollten Sie eine class-Attribut das ist etwas, das gebunden ist, um Ihre Klasse und nicht einer Instanz.So, dann kann dieses verwendet werden mag, so,
Beachten Sie, dass die zweite Zeit, die Sie
print foo
es hat aktualisiert die Zählung, aber dieid
bleibt die gleiche, das ist, weilcount
ist ein class-Attribut, aberid
ist ein Attribut des Objekts, so (mit diesem code) die Schaffung vonbar
hat keinen Einfluss auf dieid
vonfoo
, aber es erhöhtCounter.count
.InformationsquelleAutor Roshan Mathews