元类

元类

(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方法
posted @ 2024-01-12 17:07  ALPACINO6  阅读(24)  评论(0)    收藏  举报