Bei der folgenden Beispielklasse static?Sprech innerhalb Klassenstufe Container Initialisierung
14
A
Antwort
16
Es ist, weil eine statische Methode ein Deskriptor ist. Wenn Sie es an eine Klasse anhängen und es mit der üblichen Syntax aufrufen, ruft python seine -Methode auf, die ein aufrufbares Objekt zurückgibt. Wenn Sie sich mit einem reinen Deskriptor beschäftigen, ruft Python nie seine -Methode auf und Sie versuchen, den Deskriptor direkt aufzurufen, der nicht aufrufbar ist.
Also, wenn Sie es nennen wollen, müssen Sie für sich selbst in die Details füllen:
>>> Foo.aTuple[0].__get__(None, Foo)()
'aStaticMethod'
Hier None
zum instance
Parameter übergeben wird (die Instanz, auf der der Beschreiber zugegriffen wird) und Foo
wird an den Parameter owner
übergeben (die Klasse, auf der sich diese Instanz des Deskriptors befindet). Dadurch wird eine tatsächlich aufrufbare Funktion zurückgegeben:
>>> Foo.aTuple[0].__get__(None, Foo)
<function aStaticMethod at 0xb776daac>