我不明白这个TypeError

时间:2014-08-07 09:29:37

标签: python python-3.x

有人能看到问题吗?我想我在frompoints函数传递三个参数不是四个对吗?

class vector2D:

    def __init__(self, x=0.0, y=0.0):
        self.x = x
        self.y = y

    def __str__(self):
        return "({}, {})".format(self.x, self.y)

    @classmethod
    def frompoints(cls, P1, P2):
        x = P2[0] - P1[0]
        y = P2[1] - P1[1]
        return vector2D(cls, x, y)

P1 = (10.0, 5.0)
P2 = (17.0, 10.0)
v2 = vector2D.frompoints(P1, P2)

错误讯息:

Traceback (most recent call last):
File "D:/Pycharm/Testy/test.py", line 22, in <module>
v2 = vector2D.frompoints(P1, P2)
File "D:/Pycharm/Testy/test.py", line 17, in frompoints
return vector2D(cls, x, y)
TypeError: __init__() takes from 1 to 3 positional arguments but 4 were given

2 个答案:

答案 0 :(得分:0)

创建新对象时,您不需要传递cls参数。 因此,您应该执行此操作而不是:return vector2D(cls, x, y)return vector2D(x, y)

答案 1 :(得分:0)

cls中的@classmethod参数类本身,在本例中为vector2D。你没有把这个课作为其他地方的论点(它不是vector2D(vector2D, x, y)),所以为什么要在这里?

您可能会感到困惑的是,您可以在类上调用实例方法并显式传递实例作为第一个参数:

vector2D.__init__(instance, x, y)

但是,frompoints是一种类方法,因此您尚未拥有要传递的实例。你应该这样做:

return cls(x, y)