Quando provo a sovrascrivere il metodo magico __eq__
e utilizzo super
per accedere al metodo di base trovato in object
, viene visualizzato un errore. Non c'è modo questo è un bug, ma ci si sente sicuro come uno:L'oggetto 'super' non ha attributo '__eq__'
class A(object):
def __eq__(self, other):
return super(A, self).__eq__(other)
A() == 0
# raises AttributeError: 'super' object has no attribute '__eq__'
Questo è poco intuitivo, perché object.__eq__
esiste, ma per class A(object): pass
non è così. Se non mi sbaglio resort __eq__
a un controllo is
, in modo che possa essere la soluzione qui, ma utilizzando is
anziché super
non è mixin friendly. Andare su quella strada è ok nel mio caso, ma in altri potrebbe non esserlo.
Qualsiasi suggerimento o informazioni sul motivo per cui lo __eq__
funziona in questo modo sarebbe fantastico.
L'errore viene generato in 2.7 ma non generato in 3.5 –
No, 'object' non supporta' __eq__' in ** istanze ** ... prova 'oggetto() .__ eq__', genererà un' AttributeError '... invece' object .__ eq__ è (probabilmente) un metodo di classe per verificare se i tipi sono identici (ad es. 'oggetto .__ eq __ (oggetto)') – donkopotamus
@donkopotamus: Questo non confronta il tuo oggetto con 'altro'; confronterà un oggetto "vuoto" appena creato con "altro". – BrenBarn