文章目录
元类 (Metaclass) 详解
一.什么是元类?
元类是类的类,它定义了类如何被创建和行为。在 Python 中,类本身也是对象,而元类就是创建这些类对象的"模板"。
简单来说:
- 普通类 → 创建实例对象
- 元类 → 创建类对象
┌─────────────────────────────────────────────────────────────────┐
│ 元类层面 │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ 创建 ┌─────────────────┐ │
│ │ MyMeta │ ─────────────► │ MyClass │ │
│ │ (继承自type) │ │ (使用MyMeta) │ │
│ └─────────────────┘ └─────────────────┘ │
│ △ △ │
│ │ │ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ type │ │ MyChildClass │ │
│ │ (内置元类) │ │ (继承MyClass) │ │
│ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│ 实例化
▼
┌─────────────────┐
│ obj │
│ (MyClass实例) │
└─────────────────┘
二.基本概念
1. 类型层次结构
# 一切皆对象
num = 42
print(type(num)) # <class 'int'> - num 是 int 类的实例
print(type(int)) # <class 'type'> - int 类是 type 类的实例
class MyClass:
pass
obj = MyClass()
print(type(obj)) # <class '__main__.MyClass'> - obj 是 MyClass 的实例
print(type(MyClass)) # <class 'type'> - MyClass 是 type 类的实例
print(type(type)) # <class 'type'> - type 是它自己的实例
2. 默认元类
在 Python 中,所有类的默认元类都是 type。
三.创建元类的方法
方法1:继承 type 类
class MyMeta(type):
def __new__(cls, name, bases, attrs):
"""在类创建时调用"""
print(f"创建类: {
name}")
# 可以修改类属性
attrs['version'] = '1.0'
# 自动添加前缀到方法名
new_attrs = {
}
for attr_name, attr_value in attrs.items():
if callable(attr_value) and not attr_name.startswith('__'):
new_attrs['meta_' + attr_name] = attr_value
else:
new_attrs[attr_name] = attr_value
return super().__new__(cls, name, bases, new_attrs)
def __init__(cls, name, bases, attrs):
"""在类初始化时调用"""
super().__init__(name, bases, attrs)
print(

最低0.47元/天 解锁文章
3624

被折叠的 条评论
为什么被折叠?



