4

我有一个Point具有xy属性的类。我想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。我们这样做是为了以防他们比较其他一些碰巧具有xory属性但不一定是相同上下文的类型。

第二个捕获属性错误,以防有人继承 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 回答