我的课程Point
包含x
和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
?
答案 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。我们这样做是为了比较碰巧具有x
或y
属性但不一定是相同上下文的其他类型。
第二次捕获属性错误,以防万一有人子类Point并删除属性或以某种方式更改Point。
答案 2 :(得分:1)
试试这个:
def __eq__(self, other):
return isinstance(other, Point) and self.x == other.x and self.y == other.y