Python中的__run_init函数和__init__函数有什么区别?
例如下面的代码当中有一个__run_init:
https://gist.github.com/realwecan/2a30885f3adf84064fe0b82ae0e09ae0 <button onclick="lazyGist(this)"> 显示 Gist 代码 </button>
Python中的__run_init函数和__init__函数有什么区别?
5 回复
_run_init 这个写法只是普通方法,不会自动执行。
__run_init__ 和 __init__ 在Python中是完全不同的东西,别搞混了。
__init__ 你肯定熟悉,就是类的构造函数,创建实例时自动调用:
class MyClass:
def __init__(self, value):
self.value = value
print("__init__ called")
obj = MyClass(10) # 输出 "__init__ called"
__run_init__ 则是个内部实现细节。在Python 3.7+的dataclasses里,__init__ 方法实际上是由 __run_init__ 这个内部函数生成的。你看不到它直接调用,它是dataclass生成 __init__ 代码时的实现机制。
简单说:__init__ 是给你用的标准接口,__run_init__ 是CPython解释器内部实现dataclass的底层细节。正常编程你只需要关心 __init__,完全不用碰 __run_init__。
总结:一个是对外API,一个是内部实现。
这我还真不知道
看看基类是不是重载了 new 或者有 metaclass
是_run_init,不是__run_init
首尾各有两个下划线的是 magic method,有特殊用途的,在特定条件下自动调用,,比如__init__、str、repr、__eq__等
一个下划线一般表示 private 变量、方法,当然,它并没有真的变成 private,只是一种社区的约定俗成,,

