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__、strrepr、__eq__等

一个下划线一般表示 private 变量、方法,当然,它并没有真的变成 private,只是一种社区的约定俗成,,

回到顶部