在一个程序中,我有类似的事情发生:
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。我想通过地址测试会员资格,而不是等价。有没有办法让in
和not in
运算符使用is
而不是==
?是否有其他运算符/算法可以解决这个问题?
答案 0 :(得分:2)
如果您想按地址测试会员资格,可以使用此any
/ is
组合:
if not any(b is x for x in ary):
ary.append(b)
如果您坚持使用in
语法,则可以定义自己的列表对象并实施与is
而不是==
进行比较的__contains__
方法。< / p>