2010-10-14 6 views

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>