2012-04-28 100 views
3

我想知道是否放在python类的顶部的声明是相当于__init__?例如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

该错误表明您的Python安装有些问题。这是另一个问题的话题。一定要包括详细信息 - 哪个版本,哪个操作系统,你如何获得它等等。 – delnan 2012-04-28 08:21:58

回答

6

不,它不等同。在定义类bla时运行语句print 'not init',即使在实例化类型为bla的对象之前。

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

>>> b = bla() 
init 
0

他们是不完全一样的,因为如果你这样做c=bla()事后也只会打印init

此外,如果您降低main()只是return 0它仍然打印not init

0

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

0

它们不等价。您的打印语句init以外的方法仅在被定义类时调用一次。例如,如果我是来修改你的main()函数是以下几点:

def main(): 
    b=bla() 
    b.whatever() 
    c = bla() 
    c.whatever() 
    return 0 

我得到以下输出:

not init 
init 
whatever 
init 
whatever 

的未初始化print语句执行一次,当类是被定义。

+0

当类定义时,print语句执行一次,而不是第一次创建它的一个实例。但是接下来你在最后一句中正确地说... – jadkik94 2012-04-28 08:43:46

+0

谢谢,我已经编辑它使得更清楚的是,在定义类时它将被调用并且它独立于类实例化。 – CadentOrange 2012-04-28 08:46:21