0

我对身材匀称和运算符的使用有疑问==。有一个函数可以测试几何对象的相等性:.equals()。但是==不起作用。

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

返回真。

然而:

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

返回 False

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

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))
4

1 回答 1

0

实现的一个副作用__eq__是 Point 不再是字典中的键。如果你想要这个功能,你可以添加这个:

def __hash__(self):
    return hash(id(self))
于 2013-08-15T16:45:11.270 回答