Python 对象初始化和方法评估顺序

Python object initialization and order of method evaluation

出于好奇而提问:

直觉上,我倾向于认为下面的代码会失败,因为 __init__ 函数调用 somefunc 来填充 somevar 函数在对象的主体中定义之前,如模块中的函数就是这种情况。

你能解释一下为什么这段代码真的有效吗?

谢谢,

class someobj:
    def __init__(self):
        self.somevar = self.somefunc()
    def somefunc(self):
        return 'some_value'

obj = someobj()
print(obj.somevar)

调用def 将函数代码、变量等分配给它的名称,但不会运行 内部代码。 Documentation.

解释器看着这个脚本说

  1. 我将定义一个 class(基本上是一个命名空间)
  2. 在 class 中,我将定义 class.init
  3. 另一个定义调用;我将定义 class.somefumc
  4. 现在构造函数调用了 init 并且已经定义了 somefunc 方法。