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

Daniele Varrazzo piro a develer.com
Mar 25 Giu 2013 15:59:54 CEST


On Tue, 2013-06-25 at 14:31 +0200, Luca Bacchi wrote:
> 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.

Martelli ha usato __new__ per implementare un "borg", che implementa il
pattern singleton. Non l'ha usato per cambiare il contratto di __init__
che è quello di restituire un'istanza. __new__ ha diversi buoni
utilizzi. NON questo.

Off-topic: anche se l'ha detto Santo Alex, anche il borg è un'idea della
cippa, anch'esso per la violazione del principio di minima sorpresa.
Forse non sembra leggendo l'articolo, ma lo diventa quando qualcuno lo
usa davvero, dopo aver speso ore a cercare un bug causato da quello,
dove un valore sbagliato in un punto del programma si ripercuoteva in
parti del tutto impreviste grazie al dizionario condiviso dalle istanze.
Esistono modi diversi di creare singleton, sempre usando __new__, ma che
almeno non rompono "is". Se qualcuno vuole provarci, questo è un buon
esercizio per capire come funziona __new__.


> E se lo fa lui, "si può
> fare"!

È anche utile capire perché uno fa una cosa, non solo ripetere quello
che dice senza tenere in considerazione il contesto né le conseguenze.
Altrimenti è religione, non informatica.

- This isn't a fucking piece of evidence, this is a person! He's a
friend of mine, and you're not gonna bury him in the fucking garden.

- He was killed serving Project Mayhem, sir.

- This is Bob.

- But sir, in... in Project Mayhem we have no names.

- No, you listen to me.  This is a man, and he has a name.  And it's
Robert Paulson, OK?

- Robert Paulson?

- He's a man and he's dead now because of us, all right?  Do you
understand that?

- I understand.  In death, a member of Project Mayhem has a name. His
name is Robert Paulson.

- His name is Robert Paulson.
- His name is Robert Paulson.
- His name is Robert Paulson.
...


-- 
Daniele



Maggiori informazioni sulla lista Python