元类

元类

(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 @   ssrheart  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示