Ho il seguente codice:I tipi di coerce di Python eseguono un sovraccarico dell'operatore?
a = str('5')
b = int(5)
a == b
# False
Ma se faccio una sottoclasse di int
, e reimplementare __cmp__
:
class A(int):
def __cmp__(self, other):
return super(A, self).__cmp__(other)
a = str('5')
b = A(5)
a == b
# TypeError: A.__cmp__(x,y) requires y to be a 'A', not a 'str'
perché queste due differenti? Il runtime python rileva l'errore TypeError di int.__cmp__()
e l'interpreta come valore False
? Qualcuno può indicarmi il bit nella fonte cpython 2.x che mostra come funziona?
Nota a margine: si sa che '__cmp__' è stato deprecato anni fa? Dovresti implementare funzioni di confronto avanzato. – Bakuriu
Sì, questo è venuto fuori quando stavo cercando di capire se avrei dovuto sollevare un'eccezione o restituire NotImplemented in un'implementazione di __eq__. Volevo vedere cosa facevano le classi Python e ho trovato questo esempio che sembrava incoerente. – Chris