메타클래스는 일반적으로 클래스를 생성하는 데 사용됩니다. 클래스 정의를 실행할 때 인터프리터는 클래스의 올바른 메타클래스를 알아야 합니다. 인터프리터는 먼저 클래스 속성 __metaclass__를 찾습니다. 이 속성이 존재하는 경우 이 속성을 이 클래스에 메타클래스로 할당합니다. 이 속성이 정의되지 않은 경우 상위 클래스에서 __metaclass__를 조회합니다. __metaclass__ 속성이 아직 발견되지 않으면 인터프리터는 __metaclass__라는 전역 변수를 확인하고 존재하는 경우 이를 메타클래스로 사용합니다. 그렇지 않은 경우 클래스는 메타클래스로 type.ClassType을 사용하는 전통적인 클래스입니다.
클래스 정의를 실행할 때 이 클래스의 올바른(일반적으로 기본) 메타클래스가 확인됩니다. 메타클래스는 (일반적으로) 세 가지 매개변수(기본 클래스 A 튜플에서 상속된 클래스 이름)를 전달합니다. 데이터 및 속성(클래스) 사전입니다.
메타클래스는 언제 생성되나요?
#!/usr/bin/env python print '1. Metaclass declaration' class Meta(type): def __init__(cls, name, bases, attrd): super(Meta,cls).__init__(name,bases,attrd) print '3. Create class %r' % (name) print '2. Class Foo declaration' class Foo(object): __metaclass__=Meta def __init__(self): print '*. Init class %r' %(self.__class__.__name__) # 何问起 hovertree.com print '4. Class Foo f1 instantiation' f1=Foo() print '5. Class Foo f2 instantiation' f2=Foo() print 'END' 输出
결과:
1. Metaclass 선언
2. 3. 'Foo' 클래스 생성
4. 클래스 Foo f1 인스턴스화
*. 'Foo' 클래스 초기화
5. *.Init 클래스 'Foo'
END