gpt4 book ai didi

python - 为用户定义的类设置多重性

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:03 25 4
gpt4 key购买 nike

我想在我制作的一些类(class)中使用集合。我希望这些集合能够限制该类对象的多样性。但是我有一个问题。考虑这个玩具示例:

class Thing(object):

def __init__(self, value):
self.value = value

def __eq__(self, other):
return self.value == other.value

def __repr__(self):
return str(self.value)

a = Thing(5)
b = Thing(5)

s = set()
s.add(a)
s.add(b)
print s

这段代码的输出是:

set([5, 5])

我只是假设 set() 会使用 __eq__ 来确定是否应该包含该对象,但它可能使用 is。是否有一个简单的解决方法,使输出只是 set([5])

最佳答案

您需要定义类的__hash__ 方法以返回基于value 的哈希码。换句话说,你需要让你的类(class) hashable .

class Thing(object):

def __init__(self, value):
self.value = value

def __eq__(self, other):
return self.value == other.value

def __repr__(self):
return str(self.value)

def __hash__(self):
return hash(self.value)

a = Thing(5)
b = Thing(5)

s = set()
s.add(a)
s.add(b)
print s

关于python - 为用户定义的类设置多重性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7724737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com