将 class 的实例用作 super/base class 的目的是什么?

What is the purpose of using instance of a class as a super/base class?

在 Python 中子 class 一个 class 实例的目的是什么?这是一个例子:

class A:
    def __init__(*args): print(args) 

base = A() 


class Test(base): pass 

这段代码在Python下可以正常运行,但是base是class的一个实例A (1)为什么我们需要sub class class? 的一个实例 它与 metaclasses 相关吗?

来自这个问题:

我知道 Test(base) 将变为 type(base).__init__,(2) 这是否发生在定义时,当定义 class 时? (3) Python know/decide 怎么知道 base 是一个 class 的实例?是因为 type(base) 不是 return type 吗?

Python 实际上使用 type(base)(classname, bases, body) 来生成 class 对象。这是正常的 metaclass 调用(除非 class 直接指定特定的 metaclass)。

对于实例(或模块,基本上也是一个实例),这意味着调用class __new__静态方法来生成一个新实例,并在该新实例上调用 __init__。因此,对于您的 class Test(base): pass 语法,当 Python 执行 class 语句时,您实际上是在创建 A 的新实例。

这不是真的'definition time'; Python 代码中没有这样的阶段。 Python 加载模块的字节码并在第一次导入时执行它。 Class 模块顶部的语句(因此不在函数内部)在那个时候执行。正是在那时执行了 type(base)(...) 调用,是的。

Python 没有 'know' 或 'decide' 任何关于基础 class 的东西。 Python 的理念是信任在其中编写代码的开发人员。假设您知道自己在做什么,并且基本 classes 只是被视为它们会正确响应。由于 type(base)(....) 没有引发异常,Python 只是继续。

您可以使用任何可调用的元数据class,真的。