我写了一个基本的向量类来处理向量。计算它们的大小等等。我有两个重载构造函数,一个接受两个参数x
和y
,另一个接受一个元组(x,y)
。你知道吗
当我初始化一个变量时,它会给我一个错误:
TypeError:
__init__()
takes 2 positional arguments but 3 were given.
我错过了什么?你知道吗
class Vector:
x = 0.0
y = 0.0
def __init__(self, x, y):
self.x = x
self.y = y
def __init__(self, coordinates):
self.x = coordinates[0]
self.y = coordinates[1]
v1 = Vector(1,3)
print(v1.x)
Python不做重载构造函数——它是一种动态语言,不知道允许这种情况发生的类型。您的代码定义一个
__init__
,然后用第二个__init__
完全替换它。如果您想这样做,您可以定义一个带有备用签名的工厂方法并调用它。你知道吗Python不支持重载,所以用第二个方法覆盖第一个
__init__
方法。第二个只接受一个参数:coordinates
。Python编写3个参数是因为实例(self
)是隐式传递的。你知道吗删除第二个
__init__
方法,它将正常工作。你知道吗例如,如果您喜欢多个构造函数,可以将其他构造函数实现为
classmethods
:测试:
没有重载构造函数:第二个方法定义覆盖第一个方法定义。因此,您的only构造函数只接受两个参数。你提供的3个自我是隐含的。你知道吗
相关问题 更多 >
编程相关推荐