[Python] 클래스에서 Scoping Rule 최종: 그림으로 이해하기

azzurri21·2021년 7월 8일
1

Python Scoping Rule

목록 보기
3/3

※ Scoping Rule에 관한 이전 두 포스트(상속과 네임스페이스, 메타클래스를 고려한 Scoping Rule)의 내용을 그림과 함께 요약 정리한 것입니다.


클래스 다이어그램의 형식을 빌려 메타클래스, 클래스, 인스턴스의 관계를 나타냈습니다. 부모와 자식, 클래스와 인스턴스의 관계는 상대적이지만, 여기서는 고정적으로 그림 상에서의 위치를 말합니다. 이외에도,

  • 각 사각형은 객체를 의미합니다.
  • 점선 화살표(--->)는 객체(인스턴스) 생성을 의미합니다.
  • 실선 화살표(─▷)는 상속관계를 의미합니다.

클래스, 인스턴스의 관계

클래스 이름 아래 칸은 그 객체(클래스와 인스턴스를 모두 포함)의 namespace를 나타냅니다. 즉, 클래스의 namespace에는 클래스변수와 인스턴스 이름으로 호출하는 메서드가 저장됩니다.

메타클래스, 클래스, 인스턴스의 관계

type은 모든 메타클래스가 상속받는 메타클래스이며, object는 모든 클래스가 상속받는 클래스입니다. 그림의 메타클래스는 type을 상속받는, 사용자가 정의한 메타클래스를 이릅니다.

Scoping Rule (Namespace 확인 순서)

어떤 객체의 이름으로 속성을 호출하면, 그 객체의 namespace를 시작으로 우선 왼쪽 화살표를 따라, 더이상 없다면 위쪽 화살표를 따라가며 namespace를 검색합니다. 마지막에는 공통적으로 모듈의 전역 영역을 확인합니다.

[예시] (전역 영역 생략)

  • <상속 고려 X>
    (부모) 인스턴스
    (부모) 클래스

  • <상속 고려 O>
    자식 인스턴스
    자식 클래스 → 부모 클래스

  • <메타클래스 적용>
    자식 인스턴스
    자식 클래스 → 부모 클래스 → object 클래스
    메타클래스 → type 메타클래스

[참고]

  • 인스턴스를 self 매개변수에 전달받는 (인스턴스)메서드의 이름은 클래스 namespace에 존재합니다. 즉, 클래스 namespace에 (인스턴스)메서드 객체가 저장됩니다.
  • 직접 정해주지 않은 경우, 자식클래스의 메타클래스는 부모클래스의 것과 같습니다.
profile
파이썬 백엔드 개발자

0개의 댓글