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

Luca Bacchi bacchilu a gmail.com
Mar 25 Giu 2013 14:31:35 CEST


Non è brutto come sembra! Non l'ho mai usato neppure io ma, se non sbaglio,
circola una presentazione di Martelli sui Design Pattern in Python in cui
ne fa uso per implementare, mi sembra un Singleton. E se lo fa lui, "si può
fare"!

Detto questo credo avesse senso suggerire un approccio più tradizionale e
meno legato alle specificità di Python.


Il giorno 25 giugno 2013 14:21, <a.cavallo a cavallinux.eu> ha scritto:

> 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(...)
>>
>
> ______________________________**_________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/**mailman/listinfo/python<http://lists.python.it/mailman/listinfo/python>
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130625/faa0b00f/attachment.html>


Maggiori informazioni sulla lista Python