4

属性を持つクラスPointxありyます。オブジェクトを他のタイプのオブジェクトとFalse比較したいと思います。Pointたとえば、Point(0, 1) == None失敗します。

AttributeError: 'NoneType' object has no attribute 'x'

クラス:

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 __ne__(self, other):
        return not self.__eq__(other)

他のオブジェクト タイプと比較するように設定__eq__するにはどうすればよいですか?False

4

3 に答える 3

2

すべての非オブジェクトPointを拒否するのではなく、他のオブジェクトがオブジェクトのように動作するかどうかを確認します。Point

def __eq__(self, other):
  try:
    return self.x == other.x and self.y == other.y
  except AttributeError:
    return False

そのようPoint(1, 1) == Vector(1, 1)に、座標ベクトルを使用する場合。

于 2012-07-08T23:08:57.313 に答える
1
def __eq__(self, other):
    if not isinstance(other, Point):
        return False
    try:
        return self.x == other.x and self.y == other.y
    except AttributeError:
        return False

最初に型を確認し、Point インスタンスでない場合は False を返します。xこれは、たまたまory属性を持っているが、必ずしも同じコンテキストではない他のタイプを比較している場合に備えて行います。

次に、誰かが Point をサブクラス化して属性を削除したり、何らかの方法で Point を変更した場合に備えて、属性エラーをキャッチします。

于 2012-07-08T23:07:42.643 に答える
1

これを試して:

def __eq__(self, other):
        return isinstance(other, Point) and self.x == other.x and self.y == other.y
于 2012-07-08T23:07:45.370 に答える