2011-12-15 121 views

回答

6

在python中,为了检查一个对象是否等于或不等于另一个对象,调用特殊函数。 __eq__被称为检查==,而__ne__被称为检查!=

一般来说,对象可能不是__eq__定义__ne__不同。

E.g.

class Junk(object): 
    def __ne__(self, other): 
     return False 

    def __eq__(self, other): 
     return False 

j = Junk() 
print not j == 1 
print j != 1 

这产生了:

True 
False 

然而,这将是非常邪恶的......通常你应该永远不必担心这个问题。

+0

奇怪!什么是一个人会真正想要“a .__ ne __(b)!=不是.__ eq __(b)`? – wim 2011-12-15 02:49:50

1

not a == b被翻译为致电not a.__eq__(b),而a != b被翻译为致电a.__ne__(b)。大多数情况下(几乎所有我能想到的正常对象),__ne__被定义为def __ne__(self, other): not self.__eq__(other),所以没有功能差异。但是,您可以轻松创建一个与其他值相同并且不等于其他值的精神病对象,只需以正确的方式覆盖__ne__(尽管我无法想象现在这种情况会有意义的情况)。

另一方面,内建对象可能以比not a == b稍快的方式实施a != b,但可能不会有任何明显的量。