[Python-de] 'Pointer' auf eine @staticmethod-function

Dieter Neubauer neubauer at lni.de
Mo Jul 7 14:53:22 CEST 2008


Diez B. Roggisch schrieb:
> On Monday 07 July 2008 12:21:09 Dieter Neubauer wrote:
>   
>> Hi,
>>
>> eigentlich meinte ich es sei ganz einfach: ich weise einer
>> Class-Variable einfach den Verweis auf eine Funktion zu, aber dann kam
>> immer ..
>>
>> 'TypeError: unbound method time() must be called with A instance as
>> first argument (got nothing instead)'
>>
>>
>> Abgestrippt sieht das Ganze so aus:
>>
>> import time
>>
>> class A:
>>     time = time.time
>>
>> class B:
>>     @staticmethod
>>     def time():
>>         return time.time()
>>
>> print A.time()
>> A.time = B.time
>> print A.time()
>>
>> Ich kann immer noch nicht sehen, wo da ein Problem ist, denn das geht:
>>  >>> B.time()
>>
>> 1215425937.687
>>
>> Hat jemand 'ne Ahnung, was ich da falsch mache?
>>     
>
> class A:
>    time = staticmethod(time.time)
>
> sollte gehen.
>
> In Python werden Funktionen auf Klassen durch das Descriptorprotokoll gejagt. 
> Das passiert nach dem Klassenstatement, und damit wird time in A oben eben 
> auch zu einer "normalen" methode.
>
> Alternativ geht
>
> class A: pass
>
> A.time =time.time
>
> Diez
>   

Leider geht das nicht (habs probiert)!
Im Skript funktioniert ja auch noch das erste 'print A.time()'.
Erst nachdem 'A.time = B.time'  zugewiesen wurde gibt's den Fehler und 
das wo B.time als staticmethod gekennzeichnet ist!

Dieter

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://mail.python.org/pipermail/python-de/attachments/20080707/521b2ee6/attachment.html>


Mehr Informationen über die Mailingliste python-de