我想比较对象,如果它们接近则声明它们相等。
我在这里有一个Person
类,其中包含name
,age
和sex
属性。如果他们有相同的名字,并且他们的年龄相互容忍,我希望两个人决心成为同一个人,不分性别。
我原本希望如下所示,但这不起作用,因为声明相同的对象必须具有相同的哈希值。
在下面的例子中,我希望set(People)只返回一个人,因为我没有比较sex
,并且它们都具有相同的名称,并且它们的年龄等于tol。
有没有一种干净的方法来解决这个问题?
#!/usr/bin/python
tol=5
class Person:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def __repr__(self):
return repr((self.name, self.age, self.sex))
def __eq__(self, other):
return self.name==other.name and (abs(self.age-other.age)<tol)
def __hash__(self):
return hash((self.name,self.age))
names=["James Jones", "James Jones", "James Jones"]
ages = [47.53,47.53,47.531]
sexes=["M","F","M"]
People=[]
for i in range(3):
People.append(Person(names[i],ages[i],sexes[i]))
for person in set(People):
print person
答案 0 :(得分:-1)
除了将进行比较的__eq__()
方法之外,您还必须实现一个__hash__()
方法,该方法将为应该被视为相同的对象返回相同的值。对于您的日期阈值,这可能很难。