[python] Metody korenoveho objektu

Ondrej Nekola python na py.cz
Úterý Duben 1 16:06:40 CEST 2003


> map(lambda x: x.close(), kontejnerWoken)
> filter(lambda x: x.maMinimalizacniTlacitko(), kontejnerWoken)
> def afterDelay(t, meth, *a, **kw) :
>     time.sleep(t)
>     apply(meth, a, kw)
> afterDelay(60, wokno.close)

>
> S tou syntaxi, kterou navrhujete to asi obecne nepujde, ale stejne

Predpkladam, ze by slo, pokud bych byl schopen rozsirit interface objectu 
(korenove tridy). 

> nechapu, proc ma mit treba instance float(2.2) metodu afterDelay().

Imho neni duvod, proc by nemohl mit tyto metody kazdy objekt, prestoze cast z 
nich je neuzije.

> Udelat tu metodu pro konkretni tridu asi problem neni:
>
> class Delayed :
>
>     def afterDelay (self, t) :
>         time.sleep(t)
>         return self
>
>
> Jinak na vsechny objekty se lze dostat pres gc.get_objects(). Ale uz po
> startu je jich vic nez tisic, takze prochazet je porad dokola asi nepripada
> v uvahu. Mozna by se to dalo optimalizovat pres volani
> gc.get_referrers(*obj). Na seznam vsech instanci dane tridy by se melo jit
> dostat nejak takto:
>
> def inst_list (cls) :
>     return filter(lambda x: isinstance(x, cls), gc.get_referrers(cls))
>
> (vse bez zaruky)

Tudy, obavam se, cesta nevede. Mozna reseni, ktera me napadaji
1) zmenit primo definici objectu, zde nevim, zda k tomu nebudu potrebovat 
hrabat se v C.
2) pri startu programu rozsirit protkol objectu. Pak by, predpokladam, mely 
vsechny loadovane tridy mit prislusne rozsireny interface.
-- 
S pozdravem
	Ondra Nekola
	ondra na matfyz.cz
	http://ondra.matfyz.cz
	ICQ# 160692888


Další informace o konferenci Python