在Python中通过自定义对象值访问字典值?

Sam*_*Sam 7 python dictionary object

所以我有一个由一系列点组成的正方形.在每一点都有一个相应的值.

我想要做的是建立一个这样的字典:

class Point:
    def __init__(self, x, y):
        self._x = x
        self._y = y


square = {}    
for x in range(0, 5):
        for y in range(0, 5):
            point = Point(x,y)
            square[point] = None
Run Code Online (Sandbox Code Playgroud)

但是,如果我稍后创建一个新的点对象并尝试使用该点的键访问字典的值,则它不起作用..

>> square[Point(2,2)]
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    square[Point(2,2)]
KeyError: <__main__.Point instance at 0x02E6C378>
Run Code Online (Sandbox Code Playgroud)

我猜这是因为python不认为具有相同属性的两个对象是同一个对象?有没有办法解决?谢谢

Ign*_*ams 12

定义Point.__hash__(),Point.__eq__()以便在dicts中正确比较它们.

当你在它的时候,考虑定义,Point.__repr__()以便你得到Point对象的体面表达.


Dav*_*vid 5

是的,在Point类上定义__eq____hash__方法.

class Point:
    def __init__(self, x, y):
        self._x = x
        self._y = y

    def __eq__(self, other):
        return self._x == other._x and self._y == other._y

    def __hash__(self):
        #This one's up to you, but it should be unique. Something like x*1000000 + y.
Run Code Online (Sandbox Code Playgroud)