这只是注释(Python Objects Basics)的一个例子
class Cow():
noise = 'moo!'
def __init__(self, color):
self.color = color
print "This cow is " + self.color
def make_noise(self):
print self.noise
def set_color(self, new_color):
self.color = new_color
def get_color(self):
return self.color
def __cmp__(self, other):
if self.color == other.color:
return True
else:
return False
def __str__(self):
return self.color + ' ' + self._noise
blue_cow = Cow('blue')
red_cow = Cow('red')
blue_cow.make_noise()
print red_cow == blue_cow
blue_cow.set_color('red')
print red_cow == blue_cow
运行后的输出:
moo!
True
False
我不理解的是为什么(最后3行)
print red_cow == blue_cow
由于red_cow有红色而blue_cow有蓝色,所以给予True,因为它假设给出False(我的视图)
最后一行两行
blue_cow.set_color('red')
print red_cow == blue_cow
最后一行为什么它执行为False,而在我看来我希望它执行到True
答案 0 :(得分:1)
您正在使用__cmp__
,尝试使用__eq__
,它可以正常运行(已测试)。
答案 1 :(得分:0)
https://docs.python.org/2/reference/datamodel.html#object.cmp
如果不进行丰富的比较(见上文),则通过比较操作调用 定义。如果self< 应返回负整数其他,零如果 self = other,正整数如果自我>其他。如果没有 cmp (), eq ()或 ne ()操作已定义,
如果更改__cmp__
如果相等则返回0,如果不相等则返回非零,它也会起作用。在python 2.7.X
答案 2 :(得分:0)
您想使用__eq__
,或者您可以使用cmp()
更改方法以实际比较字符串。
def __cmp__(self, other):
return cmp(self.color, other.color)
这允许所有其他比较操作起作用。
print red_cow == blue_cow # False
print blue_cow < red_cow # True
print sorted([red_cow, blue_cow]) # [blue moo!, red moo!]
blue_cow.color = 'red'
print red_cow == blue_cow # True