>백엔드 개발 >파이썬 튜토리얼 >Python의 메타클래스에 대한 간략한 분석

Python의 메타클래스에 대한 간략한 분석

高洛峰
高洛峰원래의
2016-10-17 11:51:331023검색

메타클래스는 일반적으로 클래스를 생성하는 데 사용됩니다. 클래스 정의를 실행할 때 인터프리터는 클래스의 올바른 메타클래스를 알아야 합니다. 인터프리터는 먼저 클래스 속성 __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


클래스가 실행될 때 __metaclass_가 실행되는 것을 볼 수 있습니다. _. 향후 클래스 객체를 정의할 때는 클래스가 선언될 때 클래스의 __init__() 메서드만 호출됩니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.