[python] nevznik objektu

David Rohleder davro na ics.muni.cz
Čtvrtek Březen 18 23:11:49 CET 2010


azurIt píše v Čt 18. 03. 2010 v 20:35 +0100:
> >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.
> 


Takže ti spadne celá aplikace. OK, s tím se dá počítat, pokud je to
jednouživatelská aplikace. Ale co když jde o nějakou třeba webovou
službu?


> 
> 
> >
> >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 <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
> >> >
> >> _______________________________________________
> >> 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
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python



Další informace o konferenci Python