Python中的构造函数链调用

5 投票
4 回答
2945 浏览
提问于 2025-04-17 07:40

我在我的类里有两个构造函数:

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)

撰写回答