Peut-on surcharger None ?
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 :
Code:
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 ) |
Si obj vaut None, je veux que qu'il ne se passe rien...
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 :
Code:
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 ) |
On surcharge la classe NoneType pour lui ajouter la méthode add_salt et le tour est joué...
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