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

MICHÁLEK Jan Mgr. Michalek.Jan na uhul.cz
Čtvrtek Červenec 22 15:25:56 CEST 2010


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: python-bounces na py.cz [mailto:python-bounces na py.cz] 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 <tomas na drencak.com>:
> 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. <Michalek.Jan 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-bounces na py.cz [mailto:python-bounces 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.kaleta na gmail.com
>> Jabber: yetty 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
>>
>> oddělení GIS
>>
>> útvar ISaT
>>
>> ÚHÚL Brandýs nad Labem
>>
>> tel.: +420 322 319 886
>>
>> email: mailto:michalek.jan na uhul.cz
>>
>> 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
>> Python na py.cz
>> 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
>> Python na py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
>
_______________________________________________
Python mailing list
Python na py.cz
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
 


Další informace o konferenci Python