Python中的元类(metaclass)可以控制类的创建,修改类的定义,是类的类。元类的主要作用有:
- 动态修改类定义
元类可以在创建类时动态修改类定义。
## python www.itzhimei.com 代码
class Meta(type):
def __new__(cls, name, bases, attrs):
# 修改属性和方法定义
attrs['attr'] = 'value'
return super().__new__(cls, name, bases, attrs)
class MyClass(metaclass=Meta):
pass
print(MyClass.attr) # 'value'
- 注册类属性
可以在元类中注册类属性,避免硬编码。
## python www.itzhimei.com 代码
class RegistryMeta(type):
_registry = {}
def __new__(cls, name, bases, attrs):
cls._registry[name] = cls
return super().__new__(cls, name, bases, attrs)
class Base(metaclass=RegistryMeta):
pass
print(Base._registry) # {'Base': __main__.Base}
- 自动添加方法
元类可以给类自动添加方法,如str、 repr等。 - 设计模式
元类是实现设计模式如单例模式的常用方式。
总之,元类可以控制类的创建、修改、注册等,是Python面向对象的高级用法。