0

shapelyと operator の使い方について質問があり==ます。幾何学的オブジェクトの等価性をテストする関数が存在します: .equals(). ただし==、機能しません。

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

True を返します。

でも:

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

False を返します

==演算子を使用してPoint、 a がリストに既に存在するかどうかを確認できるようにしたいと考えています。1 つの使用例は次のとおりです。

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

私が理解している限り、これは を==返すため機能しませんFalsein関数を使用する代わりの方法があることは知っていますが、次のキーワードを使用し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

実装の副作用の 1 つ__eq__は、Point を辞書のキーにできなくなることです。その機能が必要な場合は、これを追加できます。

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