Všem děkuju za rady, du to vyzkoušet, mám tu dva různý přístupy, ale ani jeden uplně nechápu, nicméně s pomocí Googlu si to snad rozpitvam.
Vřelý díky (teda pánové, mam z Vás mindrák, na tohle bych sám asi nepřišel) -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Tomáš Drenčák Sent: Thursday, July 22, 2010 3:21 PM To: Konference PyCZ Subject: Re: [python]Třída, která vytvoří instanci jen pokud tam už není instance se stejnými parametry Aha, tak po dostudovani pojmov to nie je pouzitie metaclass ale len __new__ metody. Tato metoda je zodpovedna za vytvorenie novej instancie objektu. Priklad ale zostava platny 2010/7/22 Tomáš Drenčák <[email protected]>: > No ja by som pouzil metaclass (staci definovat metodu __new__), vid priklad: > > xxx = {} > class Xxx(object): > def __new__(cls, param): > global xxx > if param not in xxx: > xxx[param] = super(Xxx, cls).__new__(cls, param) > return xxx[param] > > def __init__(self, param): > self.param = param > > 3077417100 > 3077417228 > 3077417100 > > Vypise > 3077417100 > 3077417228 > 3077417100 > > V kode potom nemusis nic menit... > > > 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 >> >> oddělení GIS >> >> útvar ISaT >> >> ÚHÚL Brandýs nad Labem >> >> tel.: +420 322 319 886 >> >> email: mailto:[email protected] >> >> url: http://www.uhul.cz/ >> >> >> >> __________ Informace od ESET NOD32 Antivirus, verze databaze 5300 >> (20100722) __________ >> >> Tuto zpravu proveril ESET NOD32 Antivirus. >> >> http://www.eset.cz >> >> _______________________________________________ >> 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 5300 >> (20100722) __________ >> >> Tuto zpravu proveril ESET NOD32 Antivirus. >> >> http://www.eset.cz >> >> >> __________ Informace od ESET NOD32 Antivirus, verze databaze 5300 >> (20100722) __________ >> >> Tuto zpravu proveril ESET NOD32 Antivirus. >> >> http://www.eset.cz >> >> _______________________________________________ >> Python mailing list >> [email protected] >> http://www.py.cz/mailman/listinfo/python >> > _______________________________________________ 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 5300 (20100722) __________ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
