To s new mi funguje, to s dekorátorem ne, hlásí mi to blbej syntax při použití na třídu, mam python 2.5, není to tím??
-----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Petr Messner Sent: Thursday, July 22, 2010 3:17 PM To: Konference PyCZ Subject: Re: [python]Třída, která vytvoří instanci jen pokud tam už není instance se stejnými parametry Použil bych dekorátor, nějak takto: def unique(cls): cache = dict() def factory(*args, **kwargs): key = args, tuple(sorted(kwargs.items())) if key not in cache: cache[key] = cls(*args, **kwargs) return cache[key] return factory @unique class Zvire: def __init__(self, name): ... Petr Messner 2010/7/22 MICHÁLEK Jan Mgr. <[email protected]>: > Ten slovník tam mám, já to umím zachytit, ale neumim udělat to, aby se > ta instance nevytvořila přes init, šlo by udělat > > z1= Zvire.pridejZvire('hroch') #a ta metoda bz se podivala do slovniku > a buď hotovýho hrocha vrátila, nebo udělala fungl novýho > > ale to já nechci, já to chci dělat > > z1 = Zvire('hroch') > > kdybych to narval do nový tridy tak si stejne nepomuzu, udela se tak > jako tak nova instance. > ________________________________ > From: [email protected] [mailto:[email protected]] On Behalf Of > Juda Kaleta > Sent: Thursday, July 22, 2010 2:59 PM > To: Konference PyCZ > Subject: Re: [python] Třída, která vytvoří instanci jen pokud tam už > není instance se stejnými parametry > > Vhodné by bylo mít na vytváření těchto objektů nějakou továrničku - ta > by obsahovala slovník s již vytvořeními instancemi ({'pes':..., 'hroch':...}). > Při volání metody k vytvoření nového objektu by se kouklo do slovníku, > pokud by tam již objekt s tímto klíčem byl, vrátil by se ten, pokud > ne, vytvořil by se nový objekt. > > Juda Kaleta > > E-mail: [email protected] > Jabber: [email protected] > > Dne 22.7.2010 14:50, MICHÁLEK Jan Mgr. napsal(a): > > Otázka: > je možné napsat třídu tak, aby vytvořila instanci, jen pokud ještě > instance se stejnými parametry ještě neexistuje. > > Např: > mám třídu zvíře a chtěl bych, aby se chovala následujícím způsobem >>>> z1 = zvire('hroch') >>>> z1 > <__main__.zvire instance at 0x017C1EE0> >>>> >>>> z2 = zvire('pes') >>>> z2 > <__main__.zvire instance at 0x017C1760> >>>> >>>> z3 = zvire('hroch') >>>> z3 > <__main__.zvire instance at 0x017C1EE0> >>>> > > Jde to nějak rozumně (a pochopitelně) udělat?? > > Je. > > Mgr Jan Michálek _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python __________ Informace od ESET NOD32 Antivirus, verze databaze 5300 (20100722) __________ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz __________ Informace od ESET NOD32 Antivirus, verze databaze 5301 (20100722) __________ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
