class A:
def __new__(cls):
return super(A,cls).__new__(cls)
答案 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
的实例>