python类中的声明等同于__init__?

时间:2012-04-28 08:15:17

标签: python

我想知道放在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.

关于这是为什么的任何想法?提前谢谢!

4 个答案:

答案 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语句执行一次。