Bonjour,
y a-t-il un moyen d'enchaîner la construction et l'appel d'une de ses méthodes ?

Voici un bout de code pour comprendre ma question :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
class Spam: 
    def __init__(self): 
        self.eggs = 0 
    def set (self,x,message): 
        self.eggs = x 
        print message,': eggs =',self.eggs
ce qui fonctionne mais ne me plait pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
s1 = Spam() 
s1.set( 12,'appels séparés') # appels séparés : eggs = 12 
print s1                     # <__main__.Spam instance at 0x00B557B0> 
print s1.eggs                # 12
ce qui me plait mais ne fonctionne pas (s2 vaut None)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
s2 = Spam().set( 5,'appels enchainés') # appels enchainés : eggs = 5 
print s2                               # None
Et d'ailleur, pourquoi ai-je None ?
Je n'arrive pas à comprendre le mécanisme sous-jacent de python qui me donne None...

Attention, je ne veux pas polluer ma fontion __init__ en ajoutant un paramètre x.
Ici, c'est un exemple très simplifié.
Dans mon vrai code, __init__ a déjà plein de paramètres et je trouverais très laid d'en ajouter juste pour résoudre ce problème.


And now for something completely different !
Un autre problème, celui de la comparaison profonde :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
class Bean: 
    def __init__ (self,x): 
        self.eggs = x 
 
bean1 = Bean( 5 ) 
bean2 = Bean( 5 ) 
print bean1 == bean2 # False
Comment recevoir True ?
Autrement dit, y a-t-il un moyen de comparer les contenus (et non les pointeurs) ?

Voilà, si quelqu'un a des idées, je suis preneur.

Merci d'avance.
Hadrien
(z'avez vu, j'ai mis des balises CODE )