我想知道放在python类顶部的声明是否等同于__init__
中的语句?例如
import sys
class bla():
print 'not init'
def __init__(self):
print 'init'
def whatever(self):
print 'whatever'
def main():
b=bla()
b.whatever()
return 0
if __name__ == '__main__':
sys.exit( main() )
输出结果为:
not init
init
whatever
作为旁注,我现在也得到:
Fatal Python error: PyImport_GetModuleDict: no module dictionary!
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
关于这是为什么的任何想法?提前谢谢!
答案 0 :(得分:6)
不,这不等同。即使在实例化类型为print 'not init'
的对象之前,也会在定义类bla
时运行语句bla
。
>>> class bla():
... print 'not init'
... def __init__(self):
... print 'init'
not init
>>> b = bla()
init
答案 1 :(得分:0)
它们并不完全相同,因为如果您之后c=bla()
它只会打印init
此外,如果您将main()
缩减为return 0
,它仍会打印not init
。
答案 2 :(得分:0)
这样的声明适用于整个班级。如果print是变量赋值而不是print语句,则变量将是类变量。这意味着不是每个类的对象都有自己的,而是整个类只有一个变量。
答案 3 :(得分:0)
它们并不等同。只有在定义类时,才会调用 init 方法之外的print语句一次。例如,如果我要将main()例程修改为以下内容:
def main():
b=bla()
b.whatever()
c = bla()
c.whatever()
return 0
我得到以下输出:
not init
init
whatever
init
whatever
在定义类时,not init print语句执行一次。