Python

[Python 고급] 2. Meta class

noahkim_ 2021. 8. 1. 15:55

* 이 포스팅은 인프런의 "파이썬 고급 (필수문법+오픈소스 패키지 배포)" 강의를 듣고 공부한 포스팅임

 

1. Meta class

모든 클래스를 칭함

클래스를 생성하는 과정에서 커스텀하는 과정의 역할을 수행함 (프레임워크 작성 시 필수)

동적 생성 type : 모든 클래스의 원형이며 커스텀 생성 함수임.

검증에 자주 사용됨 (엄격하게 class 생성 과정에 영향을 받음)

 

2. type 동적 클래스 생성

type( name, bases(상속을 받을 클래스), dict(인스턴스 메소드, 필드 등 값 전달) ) -> 클래스가 생성됨

 

3. 메타클래스 상속

metaclass 속성 사용하여 커스텀 메타 클래스를 생성함. 

 

  • 타입 상속
    __new__() : 클래스 인스턴스를 생성함

  • 초기화
    __init__() : 인스턴스 생성 시 초기화됨

  • 호출
    __call__() : 인스턴스를 객체함수 호출 방식으로 부를 때 호출됨

해당 함수를 거치는 과정에서 가로채기, 수정, 개선 및 반환이 가능함

 

4. Descriptor

low-level에서 다루어지는 로직

getter, setter의 확장판.

객체에서 서로 다른 객체를 속성값으로 가짐

 

  • __get__(self, obj) : 인스턴스의 속성 반환
  • __set__(self, obj, name) : 인스턴스의 속성을 인자값으로 변환
  • __delete__(self, obj) : 인스턴스의 속성 지움

  • Property : highlevel에서 로직이 이루어짐
    get, set, del을 가지는 클래스에 적용될 필드에 property 메소드를 생성 후 해당 인스턴스를 쓰면 됨.

 

인스턴스 사용 시, 재사용에 용이함