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 : 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 )
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 : 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 )
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