[python] nevznik objektu

Petr Messner petr.messner na gmail.com
Čtvrtek Březen 18 17:48:14 CET 2010


Ahoj

Že by konstruktor udělal něco tak, aby žádný objekt nevznikl, nejde
(to není bug). Možností je několik:

 - vyhazovat výjimku (jak již bylo zmíněno)
 - nevolat konstruktor (tedy nevytvářet objekt), ale volat funkci,
která sama vytvoří objekt, nebo vrátí None - podle mě nejlepší řešení
 - vytvořit objekt, který při porovnání s False vrátí True (lze
implementovat přetížením/vytvořením metody __nonzero__)

BTW. počítáš i s IPv6, že jo? :)

Petr Messner


2010/3/18 David Rohleder <davro na ics.muni.cz>:
> Ahoj,
>
> je možné, aby nevznikl objekt, který zrovna vytvářím? Příklad - mám
> třídu typu IP adresa, v konstruktoru předávám řetězec IPadresy. Chtěl
> bych, aby v případě, že IP adresa není validní, objekt vůbec nevznikl.
> Tj. aby konstruktor vrátil None:
>
>>>> ipaddr = IP("192.1023.neco.1")
>>>> ipaddr
> None
>
> chtěl jsem pak třeba udělat:
>
> if not ipaddr:
>        print "zadavas blby vstup"
>
>
>
> chtěl jsem to vyřešit asi takto:
>
> class IP(object):
>        def __init__(self, IPadresa):
>                .....
>                if chyba: return None
>
>
>
> Jenomže konstruktor vrací vždycky None, tj. touto cestou to nejde.
>
> Zatím jediné, co mne napadlo, je vyřešit to pomocí výjimky, tj.např
>
> try:
>        ipaddr = IP("192.168.34536.45")
> except ValueError:
>        ipaddr = None
>
> Ale myslím, že kdyby objekt vůbec nevznikl, tak by to bylo lepší. Jde
> to, nebo to nejde?
>
> D.
>
>
> --
> David Rohleder <davro na ics.muni.cz>
>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>


Další informace o konferenci Python