[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