Ich nehme mal an, dass die Parameter erst im Funktionsrumpf als definiert gelten, wenn die Parameterliste angearbeitet ist.
Die default-Parameter-Zuweisung ist ja aber innerhalb der Parameterliste, deshalb ist self zu dem Zeitpunkt noch nicht definiert.
Das muss auch so sein, denn wenn ich folgendes habe:
Code: Alles auswählen
def foo(a, b, c=a.lower()):
print a, b, c
d = {
"a": "HALLO",
"b": "blah",
"c": 34
}
foo(**d)
dann
kann dies nicht funktionieren, da ja nicht klar ist, in welcher Reihenfolge die keyowrd-werte aus dem dictionary geholt werden! (Elemente in einem Dictonary haben keine vorhersagbare Reihenfolge, zumindest konzeptionell)
PS: Man könnte eventuell einwenden, dass die keywords in Reihenfolge der Parameterliste raus geholt werden.
Fällt mir auch kein gutes Gegenargument zu ein, aber vielleicht veranschaulicht es das Dilemma trotzdem ein wenig.