[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