什么是<;类别';超级'&燃气轮机;类在python中是什么?
我不明白这里的什么是<;类别';超级'&燃气轮机;类在python中是什么?,python,inheritance,Python,Inheritance,我不明白这里的super术语的用法?它是一个类、函数还是其他什么 从下面的代码: class Child(SomeBaseClass): def __init__(self): super(Child, self).__init__() 有人能解释一下下面这行代码吗 super(Child, self).__init__() \uuuu init\uuuu()是python中的构造函数,super是继承类的父类 class Child(SomeBaseClass):
super
术语的用法?它是一个类、函数还是其他什么
从下面的代码:
class Child(SomeBaseClass):
def __init__(self):
super(Child, self).__init__()
有人能解释一下下面这行代码吗
super(Child, self).__init__()
\uuuu init\uuuu()
是python中的构造函数,super
是继承类的父类
class Child(SomeBaseClass):
def __init__(self):
super(Child, self).__init__()
对于此代码,每当您对类型为Child
的新对象不满足时,它将调用其构造函数\uuuu init\uuu()
,后者依次调用SomeBaseClass.\uuuu init\uu()。
意思是:使用实例self
调用子类的基类型的\uuuuu init\uuu
方法。因此,在您的情况下,这将相当于SomeBaseClass.\uuuu init\uuuuu(self)
。但是使用super
可以避免再次显式地命名基类型,也可以用于多重继承
因此基本上意味着获取类型t
的基类型,并将其绑定到实例self
,以便您可以直接调用方法
请注意,在Python 3中,的参数是可选的,因此super()。\uuuu init\uuuu()
可以工作。只需添加,您可以在以下文档中找到更多信息:。它位于页面较低的位置。那么为什么我们要重写init呢?您并没有重写它,每个类都有它的on\uuu init\uuu()
,并且从不从super继承它或将它交给子类。它就像C++或java中的构造函数。您在这里做的是从子类init调用基类init。
super(Child, self).__init__() <=> SomeBaseClass.__init__(self)
super(Child, self).__init__() <=> SomeBaseClass.__init__(self)
>>> class A(object):
... def __init__(self):
... print "A"
...
>>> class B(object):
... def __init__(self):
... print "B"
...
>>> class C(A, B):
... def __init__(self):
... super(C, self).__init__()
... print "C"
...
>>> c = C()
A
C
>>> class D(B, A):
... def __init__(self):
... super(D, self).__init__()
... print "D"
...
>>> d = D()
B
D
>>> class CC(A, B):
... def __init__(self):
... B.__init__(self) # Explicitely call B and not A !
... print "CC"
...
>>> cc = CC()
B
CC