Warum so eine Struktur
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
gibt einen Fehler NameError: name 'self' is not defined
?
Standardargumentwerte werden zum Zeitpunkt der Funktionsdefinition ausgewertet, sind jedoch self
nur zum Zeitpunkt des Funktionsaufrufs verfügbar. Daher können sich die Argumente in der Argumentliste nicht gegenseitig referenzieren.
Es ist ein gängiges Muster, ein Argument als Standard festzulegen None
und einen Test dafür im Code hinzuzufügen:
def p(self, b=None):
if b is None:
b = self.a
print b
Für Fälle, in denen Sie auch die Option haben möchten, 'b' auf Keine zu setzen:
quelle
Wenn Sie über Google hier angekommen sind, überprüfen Sie bitte, ob Sie sich selbst als ersten Parameter für eine Klassenfunktion angegeben haben. Insbesondere, wenn Sie versuchen, Werte für dieses Objekt innerhalb der Funktion zu referenzieren.
> NameError: Der Name 'self' ist nicht definiert
quelle