type 외에도 우리는 우리가 원하는 메타클래스를 만들 수도 있다
__metaclass__Foo 클래스를 만들기 위해 해당 메타클래스를 사용합니다. 발견하지 못한 경우에는 클래스를 만들기 위해 type을 사용
우리가 보통 메타클래스를 introspection, manipulating, inheritance, __dict__와 같은 변수 등을 사용하여 복잡한 무언가를 만드는 데 사용
metaclass 속성은 상속되지 않는다는 점
현재 컨텍스트와 알맞는 클래스를 만들기 위해 API와 같은 곳에 커스텀 메타클래스를 사용
metaclass callable 하기만 하면 댐
메타클래스를 이용하면 다음 일들이 쉬워집니다:
- 클래스 생성 가로채기(intercept)
- 클래스 수정하기(modify)
- 수정된 클래스 반환하기
API 개발에 많이 사용가능
function style
__metaclass__
class style
type.__new__
Python의 metaclasses(메타클래스) 이해하기
이 글은 메타클래스에 대해 가장 잘 설명되어있다고 생각되는 Stackoverflow 답변을 번역한 문서입니다. 클래스를 객체로 메타클래스를 이해하기 전에 Python의 클래스에 대한 완전한 이해가 필요합니다. 또한 Python은 Smalltalk 언어에서 따온 매우 특별한 클래스 구성이 존재합니다. 대부분의 언어에서 클래스는 어떻게 객체를 생성할지에 대해 정의하는 코드조각일 뿐입니다. 물론 Python에서도 그렇습니다: >>> class
https://tech.ssut.me/understanding-python-metaclasses/

