Petr Messner píše v Čt 18. 03. 2010 v 17:48 +0100: > 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)
musím přiznat, že řešení pomocí výjimek mně přijde jako s kanonem na vrabce, ikdyž to má svoji logiku. Pokud vnímám výjimku jako nějakou zásadně chybovou situaci, tak to do této věci nesedí, protože s chybným vstupem se má počítat a kód by ho měl ošetřovat. Možná jsem prostě jenom příliš staromódní, začínal jsem programovat v jazycích, kde výjimky nebyly a python je jazyk, kde se výjimky dají používat téměř jako lék na cokoliv. > - nevolat konstruktor (tedy nevytvářet objekt), ale volat funkci, > která sama vytvoří objekt, nebo vrátí None - podle mě nejlepší řešení To zní zajímavě, ale moc mně to nezapadá do takového toho "objektového" pohledu na svět. Nutno přiznat, že je to asi celkem jedno, z venku modulu to vypadá stejně jako přímo ten konstruktor objektu. > - vytvořit objekt, který při porovnání s False vrátí True (lze > implementovat přetížením/vytvořením metody __nonzero__) Tak o __nonzero__ jsem nevěděl. zajímavé. > > BTW. počítáš i s IPv6, že jo? :) Ne :-) není správně podporován na druhé straně. D. > > Petr Messner > > > 2010/3/18 David Rohleder <da...@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 <da...@ics.muni.cz> > > > > _______________________________________________ > > Python mailing list > > Python@py.cz > > http://www.py.cz/mailman/listinfo/python > > > _______________________________________________ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python