[python] Metody korenoveho objektu
Radek Kanovsky
rk na dat.cz
Úterý Duben 1 15:58:28 CEST 2003
On Tue, Apr 01, 2003 at 03:15:58PM +0200, Ondrej Nekola wrote:
> High order messages, Zpravy (terminologii pythonu asi metody) vyssich radu.
> Umozni to psat takove veci jako:
>
> kontejnerWoken.each().close()
> (zavola vsechny metodu close u kazdeho okna)
map(lambda x: x.close(), kontejnerWoken)
> kontejnerWoken.collect().maMinimalizacniTlacitko()
> (udela seznam oken, ktere maji minimalisacni tlacitko)
filter(lambda x: x.maMinimalizacniTlacitko(), kontejnerWoken)
> wokno.afterDelay(6000).close()
> (za minutu zavre okno)
def afterDelay(t, meth, *a, **kw) :
time.sleep(t)
apply(meth, a, kw)
afterDelay(60, wokno.close)
> serwer.repeatWithDelay(6000).ping()
> (kazdou minutu pingne server)
Podobne jako predchozi.
> For je v tom, ze tyto metody by mely vytvaret moznost, jak pracovat se vsemi
> objekty, protoze by to mel byt obecny mechanismus. Nechce se mi delat si
> vlastniho spolecneho predka, protoze ten neobsahne vsechny objekty v systemu.
S tou syntaxi, kterou navrhujete to asi obecne nepujde, ale stejne
nechapu, proc ma mit treba instance float(2.2) metodu afterDelay().
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)
Zdravi
Radek Kaòovský
Další informace o konferenci Python