[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