<class'super'> class在python中做了什么?

这个问题在这里已经有了答案:

  • 用__init __()方法理解Python super()7个答案

  • super(Child, self).__init__() <=> SomeBaseClass.__init__(self)
    

    它为调用父类的方法提供了一个很好的速记,而不必显式地键入它,这可能很长(程序员很懒)并且容易出错。 如果稍后更改代码以使Child不再是SomeBaseClass ,而是改为AnotherBaseClass ,则不必更改对构造函数的调用(由于它本身不会被默认调用,所以它不需要)

    请注意,这里的情况很明显,因为只有一个基类,但是如果存在歧义(例如两个或更多父类),则mro会占上风(正如您所期望的那样,因为这就是它的意思) :

    >>> 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
    

    super(Child, self).__init__()
    

    意思是:用实例self调用基类Child的方法__init__ 。 所以在你的情况下,这将相当于SomeBaseClass.__init__(self) 。 但是使用super可以避免再次明确命名基类型,也适用于多继承。

    所以super(t, self)基本上意味着获得类型t的基类型,并将其绑定到实例self以便您可以直接调用方法。

    请注意,在Python 3中, super()的参数是可选的,所以super().__init__()可以工作。


    __init__()是python中的构造函数, super是您从中继承类的父类。

    class Child(SomeBaseClass):
        def __init__(self):
            super(Child, self).__init__()
    

    对于这段代码,无论何时你试图创建一个类型为Child的新对象,它都会调用其构造函数__init__() ,该构造函数依次调用SomeBaseClass.__init__().

    链接地址: http://www.djcxy.com/p/30041.html

    上一篇: what does <class 'super'>class do in python?

    下一篇: Python's super() , what exactly happens?