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

Diez B. Roggisch deets at web.de
Mo Jul 7 13:19:04 CEST 2008


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




Mehr Informationen über die Mailingliste python-de