我有一个自定义类,我希望它可以用作字典中的键。所以,我需要定义__eq__
函数。就我而言,这很简单:
def __eq__(self, other):
return self.name == other.name
这里other
基本上需要基本相同,我比较一些成员变量。但是,name
只是一个字符串,我想的是用户也可以通过指定字符串进行检查。为了使它具体化,这就是我的想法:
class Hashable(object):
def __init__(self, name):
self.name = name
self.other_att = dict()
def __hash__(self):
return hash(self.name)
def __eq__(self, other):
return self.name == other.name
# Example usage
from collections import defaultdict
c = defaultdict()
h = Hashable("Name")
c[h] = list()
if h in c:
print ("Yes!") # This is fine...
但是,也想做:
if 'Name' in c:
我可以实现许多__eq__
函数,还是需要在相等函数中检查other
的类型。什么是pythonic是一种希望有效的方法呢?
答案 0 :(得分:2)
您可以使用try-except
,因为有时候请求宽恕比获得权限更容易:
def __eq__(self, other):
try:
return self.name == other.name
except AttributeError:
return self.name == other
答案 1 :(得分:2)
如果other
没有属性other
,请使用getattr
并将默认设置为name
。这是一个字符串:
def __eq__(self, other):
return self.name == getattr(other, 'name', other)