你想通过改变实例创建方式来实现单例、缓存或其他类似的特性。
类的创建过程
https://docs.python.org/3/reference/datamodel.html#metaclasses
- 当 Python 见到
class
关键字时,会首先解析class ...
中的内容。例如解析基类信息,最重要的是找到对应的元类信息(默认是type
)。 - 元类找到后,Python 需要准备 namespace (也可以认为是上节中
type
的dict
参数)。如果元类实现了__prepare__
函数,则会调用它来得到默认的 namespace 。 - 之后是调用
exec
来执行类的 body,包括属性和方法的定义,最后这些定义会被保存进 namespace。 - 上述步骤结束后,就得到了创建类需要的所有信息,这时 Python 会调用元类的构造函数来真正创建类。
如果你想在类的创建过程中做一些定制(customization)的话,创建过程中任何用到了元类的地方,我们都能通过覆盖元类的默认方法来实现定制。这也是元类“无所不能”的所在,它深深地嵌入了类的创建过程。
type动态创建类
|
|
元类声明
|
|
元类实现单例模式
|
|