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
