class x:
def __init__(self,name):
self.name=name
def __str__(self):
return self.name
def __cmp__(self,other):
print("cmp method called with self="+str(self)+",other="+str(other))
return self.name==other.name
# return False
instance1=x("hello")
instance2=x("there")
print(instance1==instance2)
print(instance1.name==instance2.name)
La salida aquí es:método __cmp__ ¿esto no funciona como se esperaba en Python 2.x?
cmp method called with self=hello,other=there
True
False
que no es lo que esperaba: estoy tratando de decir 'dos instancias son iguales si los campos de nombre son iguales'.
Si simplemente return False
de la función __cmp__
, esto también se reporta como True
!! Si devuelvo -1
, obtengo False
- pero como estoy tratando de comparar cadenas, no me siento bien.
¿Qué estoy haciendo mal aquí?
Gracias - obtienes el tickmark (a pesar de que otras personas proporcionaron información similar), ¡ya que esta es la explicación más clara! – monojohnny
Como otros comentaron, __cmp __() es obsoleto. Defina __lt __(), __eq __() y __gt __() en su lugar. Según http://docs.python.org/dev/whatsnew/3.0.html#ordering-comparisons – smci