Python 类元编程(类作为对象)
类作为对象
Python 数据模型为每个类定义了很多属性,参见标准库参考中“Built-in
Types”一章的“4.13. Special Attributes”一节
(https://docs.python.org/3/library/stdtypes.html#special-attributes)。其中
三个属性在本书中已经见过多次:__mro__
、__class__
和
__name__
。此外,还有以下属性。
cls.__bases__
由类的基类组成的元组。
cls.__qualname__
Python 3.3 新引入的属性,其值是类或函数的限定名称,即从模块
的全局作用域到类的点分路径。例如,在示例 21-6 中,内部类
ClassTwo 的 __qualname__
属性,其值是字符串
‘ClassOne.ClassTwo’,而 __name__
属性的值是 ‘ClassTwo’。这个
属性的规范是“PEP 3155—Qualified name for classes and
functions”(https://www.python.org/dev/peps/pep-3155/)。
cls.__subclasses__()
这个方法返回一个列表,包含类的直接子类。这个方法的实现使用
弱引用,防止在超类和子类(子类在 __bases__
属性中储存指向超类
的强引用)之间出现循环引用。这个方法返回的列表中是内存里现存的
子类。
cls.mro()
构建类时,如果需要获取储存在类属性 mro 中的超类元组,
解释器会调用这个方法。元类可以覆盖这个方法,定制要构建的类解析
方法的顺序。
dir(…) 函数不会列出本节提到的任何一个属性。