我正在尝试接受tuple
和list
作为Python中__add__
方法中的对象类型。请参阅以下代码:
class Point(object):
'''A point on a grid at location x, y'''
def __init__(self, x, y):
self.X = x
self.Y = y
def __str__(self):
return "X=" + str(self.X) + "Y=" + str(self.Y)
def __add__(self, other):
if not isinstance(other, (Point, list, tuple)):
raise TypeError("Must be of type Point, list, or tuple")
x = self.X + other.X
y = self.Y + other.Y
return Point(x, y)
p1 = Point(5, 10)
print p1 + [3.5, 6]
在Python解释器中运行它时得到的错误是:
AttributeError: 'list' object has no attribute 'X'
我根本无法弄清楚为什么这不起作用。这是大学课程的作业,我对Python的经验很少。我知道Python中的isinstance
函数可以接受类型对象的元组,所以我不确定我接受的tuple
和list
对象缺少哪个元素。我觉得这很简单,我只是没有接受。
答案 0 :(得分:3)
如果您希望能够添加列表或元组,请更改__add__
方法:
def __add__(self, other):
if not isinstance(other, (Point, list, tuple)):
raise TypeError("Must be of type Point, list, or tuple")
if isinstance(other, (list, tuple)):
other = Point(other[0], other[1])
x = self.X + other.X
y = self.Y + other.Y
return Point(x, y)
否则,您必须添加另一个Point对象,而不是列表。在这种情况下,只需调整你的最后一行:
print p1 + Point(3.5, 6)
答案 1 :(得分:1)
就像你得到的错误一样简单:python中的列表对象(或者可能在任何语言中都没有x或y属性)。你必须单独处理列表(和元组)