在 python 中为 init 使用其他名称

Using some other name for init in python

我正在学习使用 python 实现数据结构。我意识到 __init__ 方法被用作构造函数(我在 C++ 中读到),我的疑问是

can we use some other name like __loader__ instead of __init__ and get results?

init 是一个关键字还是只是一个约定,比如在内部使用的变量名开头使用单下划线(忽略它在 中的用法,不包括它的导入

__init__ 是将作为对象实例化过程的一部分调用的方法。如果您的对象没有完全使用该名称的方法,则在对象实例化期间不会调用该方法。当然,您以后可以随时手动调用任何其他方法,但它不会成为对象实例化的一部分。

它不是关键字,而是保留方法名用于特定用途。与您无法将自定义比较函数实现为 __foobar__ 而不是 __lt__ 的方式相同,并且仍然希望在执行 a < b.

时调用它

不,你不能。你不能,因为在实例化你的 class 的对象时,默认情况下,方法 object.__init__() 将被调用(因为默认情况下你的 class 继承自 object)。

如果您想以不同方式初始化您的对象,则必须覆盖此方法。在 python 中覆盖父 class 方法的唯一方法是定义一个具有相同名称的子方法,因此通过在 class.[=13 中定义 __init__() =]

这不是 关键字:

>>> import keyword
>>> keyword.iskeyword('__init__')
False

但这也不只是惯例。 language reference 状态:

Classes are callable. [...] The arguments of the call are passed to __new__() and, in the typical case, to __init__() to initialize the new instance.

有关 __init__()

documentation 中提供了更多详细信息