2009-11-26 12 views

Antwort

116

Standardargumentwerte werden in der Funktion define-time ausgewertet, aber self ist ein Argument, das nur zur Funktionsaufrufzeit verfügbar ist. Daher können Argumente in der Argumentliste nicht aufeinander verweisen.

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

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

Obwohl ich denke, dass das oben genannte nicht sehr hübsch ist (ich komme aus Ruby, wo Dinge einfach gut funktionieren), funktioniert das oben genannte tatsächlich als Workaround. Es ist immer noch peinlich, dass Python in einer Parameterliste selbst nicht verfügbar gemacht hat. – shevy

14

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

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

Nicht sicher, was übermäßig kompliziert ist. Fühlen Sie sich frei, mit Ihrer eigenen Lösung zu spielen, die alle Werte von b bewahrt. – Andrew

1

Wenn Sie hier über Google angekommen sind, stellen Sie bitte sicher, dass Sie selbst als erste Parameter zu einer Klassenfunktion gegeben haben. Vor allem, wenn Sie versuchen, Werte für dieses Objekt innerhalb der Funktion zu referenzieren.

def foo(): 
    print(self.bar) 

> Nameerror: name 'Selbst'

nicht definiert ist
def foo(self): 
    print(self.bar) 

> "Congrats Sie die Nameerror losgeworden!"

Verwandte Themen