Python 为什么uuu new_uuu方法在调用其父';新的跨越超方法?
我知道当我们跨超级方法调用父方法时,我们可以忽略绑定方法中的“self”参数,如下所示:Python 为什么uuu new_uuu方法在调用其父';新的跨越超方法?,python,super,Python,Super,我知道当我们跨超级方法调用父方法时,我们可以忽略绑定方法中的“self”参数,如下所示: class Foo(object): def __init__(self): super(Foo, self).__init__() # We needn't pass in the "self" argument # ... 但是在\uuuuuuuuuuuuuuuuu新方法中有些不同: class Bar(object): def __new__(cls,
class Foo(object):
def __init__(self):
super(Foo, self).__init__() # We needn't pass in the "self" argument
# ...
但是在\uuuuuuuuuuuuuuuuu新方法中有些不同:
class Bar(object):
def __new__(cls, *args, **kwargs):
return super(Bar, cls).__new__(cls, *args, **kwargs) # Why need a "cls" argument?
\uuuu new\uuuu
不是实例方法;它是传递给类对象的静态方法(使其也不是一个类方法)
从:
\uuuu new\uuuuu()
是一个静态方法(特殊情况下,您不需要声明它),它将请求实例的类作为其第一个参数
因此,即使使用super()
在MRO中查找下一个\uuuuuuuuuuuuuuuuu新方法,您仍然需要显式地传入cls
带有双下划线的特殊方法通常在类型上查找,在类的元类上也是如此(默认情况下是type()
)。这对\uuuu new\uuuu
不起作用,因为您直接在类本身上声明了它。因此,也不能应用no(这通常会将函数转换为绑定方法,例如类和实例方法)。因此,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。