[python] Třída, která vytvoří instanci jen pokud tam už není instance se stejnými parametry

Kulin kulinfx na gmail.com
Pátek Červenec 23 09:01:03 CEST 2010


On Jul 22, 7:31 pm, MICHÁLEK Jan Mgr. <Michalek.... na uhul.cz> wrote:
> 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: python-boun... na py.cz [mailto:python-boun... na py.cz] 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. <Michalek.... na uhul.cz>:
> > 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: python-boun... na py.cz [mailto:python-boun... na py.cz] 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: juda.kal... na gmail.com
> > Jabber: ye... na jabber.cz
>
> > 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
> Pyt... na py.czhttp://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

http://www.amazon.com/dp/B003NX7N38


Další informace o konferenci Python