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.
解释器看着这个脚本说
- 我将定义一个 class(基本上是一个命名空间)
- 在 class 中,我将定义 class.init
- 另一个定义调用;我将定义 class.somefumc
- 现在构造函数调用了 init 并且已经定义了 somefunc 方法。
出于好奇而提问:
直觉上,我倾向于认为下面的代码会失败,因为 __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.
解释器看着这个脚本说
- 我将定义一个 class(基本上是一个命名空间)
- 在 class 中,我将定义 class.init
- 另一个定义调用;我将定义 class.somefumc
- 现在构造函数调用了 init 并且已经定义了 somefunc 方法。