平等操作员覆盖问题

时间:2011-04-30 09:06:25

标签: python

3 个答案:

答案 0 :(得分:7)

回溯似乎表明你的goal2是一个字符串对象,而不是一个Goal对象 但你可以这样做来保护自己:

def __eq__(self, other):
    try:
        return self.name == other.name
    except AttributeError:
        return False

答案 1 :(得分:6)

在Python 2.6中,它对我来说就像一个魅力。其中一个变量很可能不是Goal个对象。正确使用应该是:

a = Goal('a', 1);
b = Goal('b', 2);

if (a == b):
    print 'yay'
else:
    print 'nay'

答案 2 :(得分:2)

您可以进一步保护您的平等运算符:

def __eq__(self, other):
    if type(self) != type(other):
        raise ValueError('comparing apples and carrots (%s)'%type(other))
    return self.name == other.name