[python] nevznik objektu

azurIt azurit na pobox.sk
Čtvrtek Březen 18 20:35:34 CET 2010


>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 <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


Další informace o konferenci Python