<div dir="ltr"><div>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"!<br>

<br></div>Detto questo credo avesse senso suggerire un approccio più tradizionale e meno legato alle specificità di Python.<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">Il giorno 25 giugno 2013 14:21,  <span dir="ltr"><<a href="mailto:a.cavallo@cavallinux.eu" target="_blank">a.cavallo@cavallinux.eu</a>></span> ha scritto:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">No, non e' brutto come sembra (sintassi a parte).<br>
<br>
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__.<br>
<br>
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__!).<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
On 2013-06-25 13:42, Daniele Varrazzo wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Mon, 2013-06-24 at 16:00 +0200, Simone Federici wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2013/6/24 Antonio Cavallo <<a href="mailto:a.cavallo@cavallinux.eu" target="_blank">a.cavallo@cavallinux.eu</a>><br>
<br>
> class A(object):<br>
>         def __new__(cls):<br>
>                 if cond:<br>
>                         return A<br>
>                 else:<br>
>                         return None<br>
><br>
<br>
brutto brutto brutto brutto<br>
</blockquote>
<br>
Bruttissimissimissimo.<br>
<br>
Non perdere tempo dietro a quest'idea: un costruttore che restituisce<br>
None è una violazione criminale del Principio di Minima Sorpresa.<br>
<br>
Scrivi un factory method, che potrebbe essere una funzione a sè ma anche<br>
un metodo della classe stessa:<br>
<br>
        class A:<br>
            def __init__(self, args):<br>
                if not cond(args):<br>
                    raise ValueError<br>
                ...<br>
<br>
            @classmethod<br>
            def new_or_none(cls, args):<br>
                try:<br>
                    return cls(args)<br>
                except ValueError:<br>
                    return None<br>
<br>
        a = A.new_or_none(...)<br>
</blockquote>
<br></div></div><div class="HOEnZb"><div class="h5">
______________________________<u></u>_________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it" target="_blank">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/<u></u>mailman/listinfo/python</a><br>
</div></div></blockquote></div><br></div>