super(A,cls).__ new __(cls)是否创建基类的实例?

时间:2018-08-11 13:03:04

标签: python

class A:  
    def __new__(cls):  
        return super(A,cls).__new__(cls)  

1 个答案:

答案 0 :(得分:3)

不,不是。它创建您想要的实例。

让我们分解所有语句。

首先,我们声明一个新的类A

class A:

默认情况下,所有类都继承自object,因此您的声明与以下内容相同:

class A(object):

接下来,您覆盖__new__的定义:

def __new__(cls):

此函数采用要实例化的class对象。

接下来,我们调用基础类的__new__方法:

super(A, cls) # This refers to the base class of A, which is object
.__new__(cls) # Calls object.__new__(cls), with cls being the class you want to instantiate

object.__new__做的不错,实际上,您可以传入所需的任何类,它将正确地实例化它。

因此,您的A.__new__只是object.__new__的委托,因此,实际上,您的A.__new__完全没有用,您可以将其删除,并且所有操作都一样。

已经说过,当您执行A()时,将触发A.__new__(A),这将触发object.__new__(A),因此您将得到A的实例。

如果要参加以下课程:

class B(A):
    def __new__(cls):
        super(B, cls).__new__(cls)

流程将相同。

B()将触发B.__new__(B),后者将触发A.__new__(B),后者将触发object.__new__(B),因此您最终得到一个B的实例