Während auf Klassenvariablen in Listenverständnissen innerhalb von Funktionsdefinitionen zugegriffen werden kann, kann auf sie nicht in Listenverständnissen innerhalb von Klassendefinitionen zugegriffen werden . Diese Diskrepanz ergibt sich aus der Tatsache, dass sich Klassenbereiche nicht auf Listenverständnisse oder andere eingeschlossene Bereiche wie Generatorausdrücke oder Funktionsdefinitionen erstrecken.
Stattdessen haben Listenverständnisse und andere solche Ausdrücke ihren eigenen lokalen Geltungsbereich, der ihnen den Zugriff verwehrt Variablen, die in umschließenden Klassenbereichen definiert sind. Dieses Verhalten ist in allen Python-Versionen konsistent.
Um auf Klassenvariablen in einem Listenverständnis innerhalb einer Klassendefinition zuzugreifen, können Sie eine der folgenden Problemumgehungen verwenden:
Betrachten Sie das folgende Beispiel:
class Foo: x = 5 # Error in Python 3: 'NameError: name 'x' is not defined' y = [x for i in range(1)]
Um die Klassenvariable x in diesem Beispiel zu verwenden können Sie eine der folgenden Problemumgehungen verwenden:
Verwenden einer expliziten Funktion:
def get_y(x): return [x for i in range(1)] y = get_y(x)
Verwenden von __init__ zum Erstellen einer Instanzvariablen:
def __init__(self): self.y = [self.x for i in range(1)]
Trotz der oben genannten Problemumgehungen Im Allgemeinen wird empfohlen, den Zugriff auf Klassenvariablen über Listenverständnisse innerhalb von Klassendefinitionen zu vermeiden. Diese Vorgehensweise kann zu Verwirrung und potenziellen Fehlern führen, insbesondere bei der Zusammenarbeit mit anderen Entwicklern.
Für einen saubereren und wartbareren Ansatz sollten Sie für den Zugriff auf Klassenvariablen innerhalb einer Klassendefinition die Verwendung von Funktionen oder Instanzvariablen anstelle von Listenverständnissen in Betracht ziehen.
Das obige ist der detaillierte Inhalt vonWarum kann ich in Listenverständnissen innerhalb einer Klassendefinition in Python nicht direkt auf Klassenvariablen zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!