不知道python元类示例代码中'return type.__call__(cls, *args, **kwds)'的含义和原因

问题描述 投票:0回答:1

我正在尝试了解 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)
?这是什么意思?

python metaclass
1个回答
0
投票

首先考虑定义一个类是什么意思:

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__
示例实际上并没有做任何常规课程无法完成的事情。

© www.soinside.com 2019 - 2024. All rights reserved.