如何在形状上实现__eq__(python)

时间:2013-08-15 16:15:56

标签: python shapely

我对shapely以及==运算符的使用有疑问。存在一个测试几何对象相等性的函数:.equals()。但是==不起作用。

Point((0, 2)).equals(Point((0,2))

返回True。

但是:

Point((0, 2)) ==  Point((0, 2))

返回False

我希望能够使用==运算符来检查列表中是否已存在Point。一个用例可能是:

if Point not in list_of_points:
    list_of_points.append(Point)

据我了解,这不起作用,因为==会返回False。我知道使用in函数可以替代any(),但我更喜欢in关键字:

if not any(Point.equals(point) for point in list_of_points):
    list_of_points.append(Point)

__eq__中实施shapely/geometry/base.py需要付出很大的努力吗? 您如何看待__eq__的这种天真实现?

class BaseGeometry(object):
    def __eq__(self, other):
        return self.equals(other)

class BaseGeometry(object):
    def __eq__(self, other):
        return bool(self.impl['equals'](self, other))

1 个答案:

答案 0 :(得分:0)

实现__eq__的一个副作用是Point不再是字典中的键。如果您需要该功能,可以添加以下内容:

def __hash__(self):
    return hash(id(self))