属性错误:丰富的比较配置

时间:2012-07-08 23:04:56

标签: python

我的课程Point包含xy属性。我希望FalsePoint对象与任何其他类型的对象进行比较。例如,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

3 个答案:

答案 0 :(得分: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),以防你使用坐标向量。

答案 1 :(得分: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。我们这样做是为了比较碰巧具有xy属性但不一定是相同上下文的其他类型。

第二次捕获属性错误,以防万一有人子类Point并删除属性或以某种方式更改Point。

答案 2 :(得分:1)

试试这个:

def __eq__(self, other):
        return isinstance(other, Point) and self.x == other.x and self.y == other.y
相关问题