[python] =?utf-8?q?T=C5=99=C3=ADda?=, která vytvoří instanci jen pokud tam už není instance se stejnými parametry

Hynek Fabian hynek.fabian na firma.seznam.cz
Čtvrtek Červenec 22 15:19:45 CEST 2010


Je to mozne udelat pretizenim metody __new__()
Jen pozor na to, ze kdyz se vrati existujici instance z cache,
bude zavolana jeji metoda __init__() jako by byla nova

class Zvire(object):
    _cache = {}
    
    def __new__(cls, name, *args, **kargs):
        if name not in cls._cache:
            cls._cache[name] = object.__new__(Zvire)
        return cls._cache[name]



MICHÁLEK Jan Mgr. (čtvrtek 22 Červenec 2010 14:50:50):
> 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


Další informace o konferenci Python