Python에서는 type 함수를 사용하여 메타클래스를 동적으로 생성할 수 있습니다. 또한 __metaclass__ 속성을 사용하여 메타클래스를 지정할 수도 있습니다. 다음으로 Python에서 메타클래스의 생성 및 사용을 설명하는 구체적인 예를 제공하겠습니다.
메타클래스를 사용하면 특정 클래스가 생성되는 방식을 정의할 수 있습니다. 기본적으로 클래스 생성 방법을 제어할 수 있습니다.
메타클래스도 클래스, 타입 클래스입니다.
메타클래스는 일반적으로 클래스를 생성하는 데 사용됩니다. 클래스 정의를 실행할 때 인터프리터는 이 클래스에 대한 올바른 메타클래스를 알아야 합니다. 이 속성이 정의되지 않은 경우 상위 클래스에서 __metaclass__ 속성을 찾습니다. 아직 찾지 못한 경우 전역 변수를 찾으세요.
기존 클래스의 경우 메타클래스는 type.ClassType입니다.
또한 메타클래스에는 세 가지 매개변수(클래스 이름, 기본 클래스에서 상속된 데이터 튜플, 클래스 속성 사전)를 전달하는 생성자가 있습니다.
다음으로 클래스를 작성할 때 클래스에 __str__() 메서드를 제공해야 하는 메타클래스를 정의합니다. __repr__() 메서드가 제공되지 않으면
에서 경고를 표시합니다.
유형
type 함수는 다음과 같은 변수의 유형을 확인할 수 있습니다.
from warnings import warn #元类需要继承type类 class ReqStrSugRepr(type): def __init__(cls, name, bases, attrd): #构造函数需要传递的参数为类名,基类,类属性字典 super(ReqStrSugRepr, cls).__init__(name, bases, attrd) # 判断__str__字符串是否在类的属性字典里 if '__str__' not in attrd: raise TypeError('Class requires overriding of __str__()') if '__repr__' not in attrd: warn('Class suggests overriding of __repr__()\n', stacklevel=3) class Foo(object): #给类指定元类 __metaclass__ = ReqStrSugRepr def foo(self): pass #这一段代码不用创建类来测试,直接运行一下就会报错,可见元类的功力。
type 함수는 새 객체를 생성할 수도 있습니다
type은 name, bases, dict라는 세 가지 매개변수를 허용합니다. 첫 번째 매개변수는 클래스 이름을 허용하고, 두 번째 매개변수는 상위 클래스(튜플 형식)를 허용하며, 세 번째 매개변수는 속성과 메서드(사전 형식)를 허용합니다.
# <type 'int'> # <type 'str'> type(1) type('mink')
함수를 받는 메소드는 다음과 같습니다
X = type('X', (object,), dict(a=1)) # 等于 class X(object): a = 1
메타클래스
us 클래스를 통해 인스턴스 객체를 생성할 수 있고, 클래스 객체를 생성하는 클래스가 메타클래스라는 것은 우리 모두 알고 있습니다. Type은 클래스 객체를 생성할 수 있습니다. 이는 유형이 메타클래스임을 의미합니다.
metaclass 속성
메타클래스를 사용하여 클래스 객체를 생성하려면 객체에 __metaclass__ 속성을 추가해야 합니다. 물론 메타클래스를 통해 클래스의 일부 기능을 수정할 수 있도록 먼저 메타클래스
def say(self): print 'hello' X = type('X', (object,), dict(say=say)) x = X() # pirnt hello x.say()
가 있어야 합니다. 위의 내용은 변수를 다음과 같이 수정하는 것입니다.
Python의 메타클래스 생성 및 사용과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!