在 python 中 - 集合用于测试对象是否在集合中的运算符
如果我有一个对象列表,我可以使用 __cmp__ 方法来覆盖对象的比较。这会影响 ==
运算符的工作方式以及 item in list
函数。但是,它似乎并没有影响 set 中的item 函数 - 我想知道如何更改 MyClass 对象,以便我可以覆盖集合比较项目的行为。
例如,我想创建一个在底部的三个打印语句中返回 True 的对象。目前,最后一个 print 语句返回 False。
class MyClass(object):
def __init__(self, s):
self.s = s
def __cmp__(self, other):
return cmp(self.s, other.s)
instance1, instance2 = MyClass("a"), MyClass("a")
print instance2==instance1 # True
print instance2 in [instance1] # True
print instance2 in set([instance1]) # False
If I have a list of objects, I can use the __cmp__
method to override objects are compared. This affects how the ==
operator works, and the item in list
function. However, it doesn't seem to affect the item in set
function - I'm wondering how I can change the MyClass object so that I can override the behaviour how the set compares items.
For example, I would like to create an object that returns True in the three print statements at the bottom. At the moment, the last print statement returns False.
class MyClass(object):
def __init__(self, s):
self.s = s
def __cmp__(self, other):
return cmp(self.s, other.s)
instance1, instance2 = MyClass("a"), MyClass("a")
print instance2==instance1 # True
print instance2 in [instance1] # True
print instance2 in set([instance1]) # False
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
set
使用__hash__
进行比较。覆盖它,你会很好:set
uses__hash__
for comparison. Override that, and you'll be good: