`__metaclass__ = type`的目的是什么?

Mec*_*ail 9 python packages metaclass python-2.x

Python(仅限2个?)查看变量的值__metaclass__以确定如何type从类定义创建对象.可以__metaclass__在模块或包级别定义,在这种情况下,它适用于该模块中的所有后续类定义.

但是,我在flufl.enum包中遇到了以下内容__init__.py:

__metaclass__ = type
Run Code Online (Sandbox Code Playgroud)

由于__metaclass__未定义默认元类if type,这不会有效吗?(如果__metaclass__分配到更高的范围,此赋值将恢复为默认值,但我看不到这样的赋值.)它的目的是什么?

Blc*_*ght 12

在Python 2中,声明__metaclass__ = type会生成声明,否则会创建旧式类而不是创建新式类.只有旧式类才使用模块级__metaclass__声明.新样式类从其基类(例如object)继承其元类,除非__metaclass__作为类变量提供.

声明实际上并未在您上面链接的代码中使用(__init__.py文件中没有类声明),但它可能是.我怀疑它是作为一些样板文件的一部分包含在内,使得Python 2代码更像Python 3(所有类都是新式的).