跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Python元类入门教程_类的类工作原理

Python元类是理解类创建机制的核心,本质是type——所有类(包括type自身)都是type的实例;类定义时元类通过__new__构造类对象、__init__初始化类,自定义元类需继承type并用metaclass关键字指定,且具有向子类传递的特性。 Python元类不是“高级技巧”,而是理解类如何被真正创建的关键。它回答一个问题:当你写下
class MyClass:
,背后发生了什么?答案是——有一个“类的类”在干活,这个就是元类。 元类就是 type,type 就是元类 在 Python 中,所有类(包括
int
str
、你写的
MyClass
)都是
type
的实例:
MyClass.__class__
返回
type.__class__
也返回
—— 它自己造自己,这是 Python 类型系统的基石 所以
type
既是类型(type of types),也是默认元类(metaclass of classes) 类的创建分三步,元类全程参与 每次执行
class
语句,Python 实际做了三件事,元类的两个方法分别对应前两步: __new__ :接收类名、父类元组、属性字典,负责“构造类对象”。你可以在这里修改命名空间、拦截非法定义 __init__ :对刚造好的类对象做初始化,比如打日志、注册到全局表、添加默认属性 (第三步是 __call__ ,发生在实例化时,即
MyClass()
,它控制对象怎么被创建) 自定义元类必须继承 type 写一个元类,本质是写一个继承
type
的类,并重写
__new__
__init__
: Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 立即学习 “ Python免费学习笔记(深入) ”; 不能直接用
object
或其他类作为基类,否则会报错 调用
super().__new__
是必须的,否则得不到真正的类对象 使用方式:
class MyClass(metaclass=MyMeta):
,注意是关键字参数,不是继承关系 元类行为具有传递性 如果父类指定了元类,它的所有子类(除非显式指定另一个元类)都会自动使用该元类: 这使得元类适合构建框架约束,比如强制所有模型类带
table_name
子类的
__new__
__init__
仍会被调用,你可以叠加逻辑 但要注意:元类不参与普通继承链(
__mro__
),只影响类的创建过程

相关文章