有人能看到问题吗?我想我在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
答案 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)