在 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 中提供了更多详细信息
我正在学习使用 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__()