我有City
班
class City(object):
def __init__(self, name):
self.name = name
然后我把它放入字典:
c = City('NYC')
cities = dict()
cities[c] = 1
我可以使用cities[c]
访问NYC的值。我可以对cities['NYC']
做同样的事吗?基本上,我希望City
实例和City.name
实例变量引用相同的密钥。
我想过单独的字典names = {'NYC': c}
,所以我可以cities[names['NYC']]
。还有更好的方法吗?理想情况下,我不需要使用单独的变量,只需要修改City
类或cities
字典的内部。
答案 0 :(得分:3)
您可以实现具有name属性的__hash__
方法和基于name属性进行相等性比较的__eq__
:
class City(object):
def __init__(self, name):
self.name = name
def __eq__(self, other):
return self.name == other
def __hash__(self):
return hash(self.name)
输出:
In [8]: c = City('NYC')
In [9]: cities = dict()
In [10]: cities[c] = 1
In [11]: cities[c]
Out[11]: 1
In [12]: cities[c.name]
Out[12]: 1
实例哈希值基于其name属性,因此使用该对象或具有instance.name的属性的查找将散列为相同的值。