Bonjour,
pour satisfaire mon désir d'élégance minimaliste j'aimerais pouvoir ne pas tester la "Nonitude" d'un objet avant d'appeler une de ses méthode...
Je m'explique :
Si obj vaut None, je veux que qu'il ne se passe rien...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 def SpamAndEggs ( obj = None ): '''obj peut être None''' if obj: # -> il faut le tester avant d'appeler sa méthode obj.add_salt( 5 ) class SaltAdder : def add_salt ( self,x ): print "yummy with some more salt" yum = SaltAdder() SpamAndEggs() SpamAndEggs( yum )
Mais, cela m'oblige à tester obj.
J'aimerai pouvoir définir un comportement par defaut de None tel que si j'invoque une méthode de None, au lieu de lever une exception, il ne se passe rien. (bien sûr, hors de question de faire des try/except !)
Un truc dans ce genre :
On surcharge la classe NoneType pour lui ajouter la méthode add_salt et le tour est joué...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class NoneType: def add_salt ( self,x ): pass # None.add_salt ne fait rien def SpamAndEggs ( obj = None ): '''obj peut être None''' obj.add_salt( 5 ) # pas besoin de test ! class SaltAdder : def add_salt ( self,x ): print "yummy with some more salt" yum = SaltAdder() SpamAndEggs() SpamAndEggs( yum )
ben non ! ça ne marche pas.
Je pense que le problème vient de ce que l'objet None est instancié au début du monde et qu'il ne profite pas des ajouts faits à la classe NoneType.
Donc, cher Pythoniste, si tu as une idée pour faire marcher mon truc, je suis preneur !
Hadrien
Partager