python super()

class Base(object):
    pass

class Inject(Base):
    def __init__(self):
        super().__init__()                  # python3
        # super(Inject, self).__init__()    # python2
        pass

class Child(Base):                  
    def __init__(self, user):
        super().__init__()                  # 1 python3 super() lets you avoid referring to the base class explicitly
        # super(Child, self).__init()       # 2 python2
        # Base.__init__(self)               # 3 avoid this, it limit you use multiple inheritance
        self.user = user

class SuperInjector(Child, Inject):
    pass
    # if Child() use SuperInjector() # 2  can call Inject()
    # if Child() SuperInjector() use # 3 can't call Inject()



# conclusion:Always use super to reference the parent class !!!

# super() issue. In a class hierarchy with single inheritance, super() can be used to refer to parent classes without naming them explicitly, thus making the code more maintainable; support cooperative multiple inheritance in a dynamic execution environment.   addr:https://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods
# standard doc on super. difference between 1 and 2.    addr:https://stackoverflow.com/questions/222877/what-does-super-do-in-python
# method resolution order(MRO)   addr:https://stackoverflow.com/questions/2010692/what-does-mro-do
# difference between 2 and 3.   addr:https://stackoverflow.com/questions/222877/what-does-super-do-in-python/33469090#33469090
原文地址:https://www.cnblogs.com/vickey-wu/p/7908601.html