obj顺序:与'是'比较而不是'=='

时间:2011-12-05 20:18:23

标签: python python-2.7

在一个程序中,我有类似的事情发生:

class MyClass:
    def __init__(self, index, other_attribute)
        self.index = index #is of type int
        self.other_attribute  = other_attribute

    # I know this is being taken out of python 3,
    # but I haven't converted it to using __eq__ etc.
    def __cmp__(self, other):
        if self.index < other.index:
            return -1
        if self.index == other.index:
            return 0
        if self.index > other.index:
            return -1

这是问题

#here are some objects
a = MyClass(1, something)
b = MyClass(1, something_else)
c = MyClass(2, something_more)

ary = [a,c]

if b not in ary:
    ary.append(b)

这不会附加b因为它们的索引相等,但它们仍然是不同的实例。 b == a为真,但b is a为false。我想通过地址测试会员资格,而不是等价。有没有办法让innot in运算符使用is而不是==?是否有其他运算符/算法可以解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果您想按地址测试会员资格,可以使用此any / is组合:

if not any(b is x for x in ary):
    ary.append(b)

如果您坚持使用in语法,则可以定义自己的列表对象并实施与is而不是==进行比较的__contains__方法。< / p>