Python中的构造函数链调用
我在我的类里有两个构造函数:
def __init__(self):
self(8)
def __init__(self, size):
self.buffer = [1] * size
我希望第一个构造函数能调用第二个构造函数,并且使用一个默认的大小。请问在Python中可以做到吗?
4 个回答
1
可能不是这样。Python中的类会用一个内部的字典来存储它的方法和属性。如果你定义了两个同名的方法,第二个方法会覆盖第一个方法。你可以给额外的参数设置一个默认值来实现这个功能。
def __init__(self, size = 8):
self.buffer = [1] * size
5
不,你不能在Python中重载方法。换句话说,你不能用相同的名字定义多个方法,只是参数不同。不过,你可以给size
这个参数设置一个默认值,这样就可以解决这个问题了:
def __init__(self, size=8):
self.buffer = [1] * size
10
在Python中,你不能定义多个初始化器(正如评论中提到的,__init__
其实并不是一个构造函数),但你可以设置默认值,比如:
def __init__(self, size=8):
self.buffer = [1] * size
在上面的代码中,默认会创建一个大小为8的缓冲区,但如果你指定了一个大小参数,就会使用这个参数的值。
举个例子,假设这个初始化器在一个叫做Example
的类里面。这样调用会创建一个新的类实例,缓冲区大小为8(默认值):
e = Example()
而这个调用会创建一个新的实例,缓冲区大小为10:
e = Example(10)
另外,你也可以这样调用构造函数:
e = Example(size=10)