我正在尝试了解 Python 元类。我几乎明白 Metaclass 在 python 中做了什么,但我无法理解示例代码的含义
class MakeCalc(type):
def __new__(metacls, name, bases, namespace):
namespace['desc'] = 'calculation'
namespace['add'] = lambda self, a, b: a + b
return type.__new__(metacls, name, bases, namespace)
为什么这个元类返回
type.__new__(metacls, name, bases, namespace)
?这是什么意思?
首先考虑定义一个类是什么意思:
class Simple:
pass
class NotAsSimple(Simple):
pass
我们说
Simple
有一个基类(在这种情况下只是object
)。它有一个名字。它还将有一个 dict
用于存储它的属性,称为命名空间。 NotAsSimple
有一个额外的基类。 Python 本质上将上面的这些行转换为参数以传递给type.__new__
。它在那里被组合成一个返回的“新”对象,在本例中是一个类。
def UsesMeta(metaclass=MakeCalc):
pass
当
MakeCalc
被用作元类时,使用MakeCalc.__new__
。一旦它添加到命名空间,就会像以前一样定期调用 type.__new__
来完成需要完成的工作。
附带说明,所提供的
MakeCalc.__new__
示例实际上并没有做任何常规课程无法完成的事情。