Enchainer construction et appel / comparaison profonde
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:
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 :roll:
Code:
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 :evilred: (s2 vaut None)
Code:
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:
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 :yaisse2:)