luc*_*egh 2 class object set duplicates python-2.7
让我们定义一个简单的类:
class sample(object):
def __init__(self, key):
self.key = key
Run Code Online (Sandbox Code Playgroud)
假设 a1、a2、a3、a4、a5 是“sample”类的对象(a1 和 a5 共享相同的“key”元素):
a1 = sample('test1')
a2 = sample('test2')
a3 = sample('test3')
a4 = sample('test4')
a5 = sample('test1')
Run Code Online (Sandbox Code Playgroud)
现在,如果我将这些元素添加到列表中,结果将是:
[<__main__.sample at 0x1189c1e90>,
<__main__.sample at 0x1189c1b90>,
<__main__.sample at 0x1189c15d0>,
<__main__.sample at 0x1189c1dd0>,
<__main__.sample at 0x1189c16d0>]
Run Code Online (Sandbox Code Playgroud)
但如果我将此列表转换为“集合”对象(以删除 a1/a5),结果将是:
{<__main__.sample at 0x1189c15d0>,
<__main__.sample at 0x1189c16d0>,
<__main__.sample at 0x1189c1b90>,
<__main__.sample at 0x1189c1dd0>,
<__main__.sample at 0x1189c1e90>}
Run Code Online (Sandbox Code Playgroud)
所以,问题是:如何修改该类,以便它可以设置两个与同一对象共享相同“键”的对象(这样我在 set() 中就没有重复项)?我正在寻找一个非常简单的实现:)
您必须实现自己的__hash__和__eq__方法,以确保在构造集合时将它们视为相等:
class Sample(object):
def __init__(self, key):
self.key = key
def __hash__(self):
return hash(self.key)
def __eq__(self, other):
return self.key == other.key
Run Code Online (Sandbox Code Playgroud)