>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.
S tymto absolutne nesuhlasim. Ak hovoris o nejakom peknom osetreni chybneho vstupu (typu vypisanie chybovej spravy), tak toto _absolutne_ nie je ulohou funkcie ci objektu, ale konecnej aplikacie, ktora bude danu funkciu/objekt pouzivat. Osetrenie vstupu je samozrejme nutnost ale nie tymto sposobom - proste staci urobit aby funkcia 'zhucala' a nesnazila sa pokracovat (a pripadne nieco pokazit). Vynimka je na toto priamo stvorena. > >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 _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python