Wenn ich versuche, die magische Methode __eq__
zu überschreiben, und super
zu verwenden, um die Basis-Methode in object
gefunden zu bekommen, erhalte ich einen Fehler. Es gibt keine Möglichkeit dies ein Fehler ist, aber es fühlt sich sicher wie ein:'Super' Objekt hat kein 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__'
Diese unintuitive ist, weil object.__eq__
existiert, aber für class A(object): pass
nicht. Wenn ich mich nicht irre __eq__
zu einem is
überprüfen, so dass die Abhilfe hier sein kann, aber is
statt super
ist nicht mixin freundlich. Diese Route ist in meinem Fall in Ordnung, in anderen aber nicht.
Irgendwelche Vorschläge oder Informationen darüber, warum __eq__
auf diese Weise funktioniert, wäre großartig.
Der Fehler wird in 2.7 ausgelöst, aber nicht in 3.5 ausgelöst –
Nein, "Objekt" unterstützt nicht "__eq__" auf ** Instanzen ** ... versuchen Sie 'object() .__ eq__', es wird ein 'AttributeError' ausgelöst '... stattdessen' object .__ eq__ ist (wahrscheinlich) eine Klassenmethode um zu überprüfen, ob Typen identisch sind (zB 'object .__ eq __ (object)') – donkopotamus
@donkopotamus: Das wird dein Objekt nicht mit 'other' vergleichen; Es wird ein neu erstelltes "leeres" Objekt mit "anderes" vergleichen. – BrenBarn