在Python 2.7中的isinstance函数中实现元组和列表

时间:2016-07-02 20:03:01

标签: python

我正在尝试接受tuplelist作为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函数可以接受类型对象的元组,所以我不确定我接受的tuplelist对象缺少哪个元素。我觉得这很简单,我只是没有接受。

2 个答案:

答案 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属性)。你必须单独处理列表(和元组)