元类
元类
(1)简介
- 元类(Metaclass)是Python中比较高级的概念,它允许你在创建类时定制类的创建过程。在Python中,类本身也是对象,而元类就是用来创建这些类的类。元类提供了一种控制类创建行为的机制。
(2)创建方式
(1)使用关键字声明创建
class Heart(object):
pass
print(Person) # <class '__main__.Heart'>
(2)使用type关键字创建
Heart = type('Heart', (), {})
print(Heart) # <class '__main__.Heart'>
(3)研究type的参数
- type(类的名字,类想要继承的父类,当前类内部的属性)
- 名称空间中放的函数属性其实就是一个非绑定方法,而不是绑定方法
class Person(object):
name = 'heart'
print(Person) # <class '__main__.Person'>
print(Person.__bases__) # (<class 'object'>,)
print(
Person.__dict__) # {'__module__': '__main__', 'name': 'heart', '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
def read():
...
PersonType = type('PersonType', (object,), {'name': 'god', 'age': 18, 'read': read})
print(PersonType) # <class '__main__.PersonType'>
print(PersonType.__bases__) # (<class 'object'>,)
print(
PersonType.__dict__) # {'name': 'god', 'age': 18, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'PersonType' objects>, '__weakref__': <attribute '__weakref__' of 'PersonType' objects>, '__doc__': None}
(4)元类
-
在这个例子中,
Meta是一个元类,它继承自内置的type类。元类中定义了__init__方法,这个方法在创建类时被调用。当你使用metaclass=Meta创建类Class时,Meta的__init__方法会被触发。 -
具体而言,在
Class类定义的时候,Meta的__init__方法会被调用,打印一条消息,然后通过super().__init__(what, bases, dict)调用父类type的__init__方法,完成类的初始化过程。
class Meta(type):
def __init__(cls, what, bases, dict):
print(f'我是Meta 里的 init方法')
super().__init__(what, bases, dict)
class Class(metaclass=Meta):
...
p = Class() # 我是Meta 里的 init方法

浙公网安备 33010602011771号