使用类的实例作为超类/基类的目的是什么?



在Python中将一个类的实例子类化的目的是什么?下面是一个例子:

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

class Test(base): pass 

这段代码在Python下正常工作,但是base是类A(1)的实例为什么我们需要子类化一个类的实例?是否与元类相关?

从这个问题:当您从Python中的模块而不是类中固有时会发生什么?

我理解Test(base)将变成type(base).__init__, (2) 这是否发生在定义时,当类被定义时? (3) Python如何知道/决定base是一个类的实例?是否因为type(base)不返回type ?

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

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

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

Python不"知道"或"决定"关于基类的任何事情。Python的哲学是信任用它编写代码的开发人员。假设您知道自己在做什么,并且基类被视为会正确响应。由于type(base)(....)没有引发异常,Python只是继续。

你可以使用任何可调用的元类,真的

最新更新