Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 클래스 본문의 선언과 __init__ 메서드 내 선언은 동일할까?

클래스 본문 어디에서든 선언된 코드(__init__ 메서드 외부)와 __init__ 메서드 내부에 선언된 코드는 결코 동일하지 않습니다. 두 실행 시점과 동작 방식이 완전히 다르기 때문입니다.

핵심 차이점

  • 클래스 본문의 코드: 클래스가 정의(정확히는 정의가 실행)되는 순간 딱 한 번 실행됩니다.
  • __init__ 메서드의 코드: 클래스로부터 인스턴스를 생성할 때마다 매번 실행됩니다.

아래 예제 코드를 통해 이 차이를 직접 확인할 수 있습니다.

예제 코드

import sys

class foo():
    print('within class')

    def __init__(self):
        print('within init')

    def do_smthng(self):
        print('do something')


def main():
    f = foo()
    f.do_smthng()
    return 0


if __name__ == '__main__':
    sys.exit(main())

실행 결과

within class
within init
do something

결과 분석

출력 순서를 보면 그 이유를 명확히 알 수 있습니다.

  1. within class — 클래스 foo가 정의되는 시점(모듈이 로드될 때)에 클래스 본문의 print 문이 즉시 실행됩니다. 아직 인스턴스는 하나도 만들어지지 않았는데도 출력됩니다.
  2. within initf = foo() 문으로 인스턴스를 생성하는 순간 __init__ 메서드가 호출되며 실행됩니다.
  3. do somethingf.do_smthng()을 명시적으로 호출했을 때 실행됩니다.

만약 클래스 본문의 선언이 __init__ 내부의 선언과 동일했다면, within classwithin init은 같은 시점에 같은 횟수만큼 출력되어야 합니다. 하지만 실제로는 클래스 본문의 코드는 정의 시점에 단 한 번 실행되고, __init__의 코드는 인스턴스화될 때마다 반복 실행됩니다. 따라서 두 선언은 실행 시점과 의미 모두에서 서로 다르다는 결론을 내릴 수 있습니다.