[Python] Ritornare un oggetto None quando dichiaro una classe...

a.cavallo a cavallinux.eu a.cavallo a cavallinux.eu
Mar 25 Giu 2013 14:21:42 CEST


No, non e' brutto come sembra (sintassi a parte).

A basso livello l'operatore __new__ corrisponde alla chiamata del 
membro tp_new: in quella chimata si creano i dati (new/malloc) che poi 
si usano durante __init__.

Mentre a livello C/C++ questo ha senso, in python lo e' meno (in piu' 
di dieci anni che sviluppo in python non ricordo di avere mai usato 
__new__!).



On 2013-06-25 13:42, Daniele Varrazzo wrote:
> On Mon, 2013-06-24 at 16:00 +0200, Simone Federici wrote:
>> 2013/6/24 Antonio Cavallo <a.cavallo a cavallinux.eu>
>>
>> > class A(object):
>> >         def __new__(cls):
>> >                 if cond:
>> >                         return A
>> >                 else:
>> >                         return None
>> >
>>
>> brutto brutto brutto brutto
>
> Bruttissimissimissimo.
>
> Non perdere tempo dietro a quest'idea: un costruttore che restituisce
> None è una violazione criminale del Principio di Minima Sorpresa.
>
> Scrivi un factory method, che potrebbe essere una funzione a sè ma 
> anche
> un metodo della classe stessa:
>
>         class A:
>             def __init__(self, args):
>                 if not cond(args):
>                     raise ValueError
>                 ...
>
>             @classmethod
>             def new_or_none(cls, args):
>                 try:
>                     return cls(args)
>                 except ValueError:
>                     return None
>
>         a = A.new_or_none(...)



Maggiori informazioni sulla lista Python