2012-04-28 4 views
3

파이썬 클래스의 맨 위에있는 선언이 __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 설치에 문제가 있음을 나타냅니다. 그것은 또 다른 질문에 대한 주제입니다. 어떤 버전인지, 어떤 OS인지, 어떻게 가져 왔는지 등과 같은 세부 사항을 포함시켜야합니다. – delnan

답변

6

아니요, 해당하지 않습니다. 문 print 'not init'bla 유형의 오브젝트를 인스턴스화하기 전에도 bla 클래스가 정의되는 동안 실행됩니다. 당신이 나중에 c=bla()을 할 경우 당신은 당신의 main() 그냥 return 0는 여전히 not init 출력을 줄일 경우에만, 또한 init

을 인쇄 할 수 있기 때문에

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

>>> b = bla() 
init 
0

그들은 정확히 동일하지 않습니다.

0

전체 클래스에 대한 선언문. print가 print 문이 아니라 변수 지정 인 경우 변수는 클래스 변수가됩니다. 이것은 클래스의 각 객체가 자체 객체를 가지지 않고, 전체 클래스에 대해 하나의 변수 만 있다는 것을 의미합니다.

0

이들은 서로 동일하지 않습니다. 메소드 외부의 print 문은 클래스가 정의 될 때 한 번만 호출됩니다. 나는 주() 루틴을 수정했다 예를 들어, 될 수있는 다음

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

내가 얻을 다음과 같은 출력 :

not init 
init 
whatever 
init 
whatever 

초기화되지 인쇄 문을 한 번 실행 클래스는 정의되고있다.

+0

print 명령문은 클래스가 정의 될 때 실행되고, 인스턴스가 처음 생성 될 때 실행되지 않습니다. 하지만 마지막 문장에서 정확하게 말하면 ... – jadkik94

+0

고마워. 나는 클래스가 정의되고 클래스 인스턴스화와 독립적인데도 print가 호출된다는 것을 명확하게하기 위해 편집했다. – CadentOrange

관련 문제