条件语句Python

时间:2016-11-20 00:42:12

标签: python python-2.7 oop conditional

这只是注释(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

3 个答案:

答案 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