3

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

4 回答 4

6

不,它不等同。该语句在定义print 'not init'类时运行bla,甚至在您实例化类型对象之前bla

>>> class bla():
...    print 'not init'
...    def __init__(self):
...        print 'init'
not init

>>> b = bla()
init
于 2012-04-28T08:22:01.497 回答
0

它们并不完全相同,因为如果你c=bla()之后这样做,它只会打印init

此外,如果你减少你main()的只是return 0它仍然打印not init.

于 2012-04-28T08:22:17.343 回答
0

诸如此类的声明适用于整个班级。如果 print 是一个变量赋值而不是一个 print 语句,那么这个变量就是一个类变量。这意味着不是类的每个对象都有自己的,而是整个类只有一个变量。

于 2012-04-28T08:23:00.570 回答
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 语句在定义类时执行一次。

于 2012-04-28T08:23:36.153 回答