Frage

Warum eine solche 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?

War es hilfreich?

Lösung

Standardargumentwerte werden in Funktion definiert Zeit ausgewertet, aber self ist ein Argument nur bei Funktionsaufruf zur Verfügung stehende Zeit. So Argumente in der Argumentliste können sie nicht beziehen.

Es ist ein gemeinsames Muster ein Argument auf Standard einen Test für die im Code None und fügen Sie:

def p(self, b=None):
    if b is None:
        b = self.a
    print b

Andere Tipps

Für Fälle, in denen Sie auch die Möglichkeit haben wollen, von ‚b‘ auf Keine Einstellung:

def p(self, **kwargs):
    b = kwargs.get('b', self.a)
    print b

Wenn Sie hier über Google angekommen sind, stellen Sie sicher, zu überprüfen, ob Sie sich selbst als ersten Parameter zu einer Klasse Funktion gegeben haben. Vor allem, wenn Sie versuchen, Werte innerhalb der Funktion für das Objekt zu verweisen.

def foo():
    print(self.bar)

> Nameerror: name 'Selbst' ist nicht definiert

def foo(self):
    print(self.bar)

> "Congrats hast du die Nameerror los!"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top