Lorsque j'essaie de remplacer la méthode magique __eq__
, et d'utiliser super
pour accéder à la méthode de base trouvée dans object
, j'obtiens une erreur. Il n'y a aucun moyen c'est un bug, mais il se sent comme une vedette:'super' objet n'a pas d'attribut '__eq__'
class A(object):
def __eq__(self, other):
return super(A, self).__eq__(other)
A() == 0
# raises AttributeError: 'super' object has no attribute '__eq__'
Ceci est unintuitive parce object.__eq__
existe, mais pour class A(object): pass
il ne fonctionne pas. Si je ne me trompe pas __eq__
stations à un contrôle is
, de sorte que peut-être la solution de contournement, mais en utilisant is
au lieu de super
n'est pas MIXIN amical. Aller dans cette voie est correct dans mon cas, mais dans d'autres, ce n'est peut-être pas le cas.
Toute suggestion ou information sur les raisons __eq__
fonctionne de cette façon serait génial.
L'erreur est survenue en 2.7 mais pas en 3.5 –
Non, 'object' ne supporte pas' __eq__' sur ** instances ** ... essaie 'object() .__ eq__', cela soulèvera un' AttributeError '... au lieu de' object .__ eq__ est (probablement) un classmethod pour vérifier si les types sont identiques (par exemple 'object .__ eq __ (object)') – donkopotamus
@donkopotamus: Cela ne comparera pas votre objet avec 'other'; il va comparer un objet "vide" nouvellement créé avec 'other'. – BrenBarn