关于python:多重继承中无用的super?

useless super in multiple inheritance?

本问题已经有最佳答案,请猛点这里访问。

在多重继承中super()是如何工作的?例如,这里我有两个init,我想通过super()发送args:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class LivingThings(object):
    def __init__(self, age ,name):
        self.name=name
        self.age=age

    def Print(self):
        print('age: ', self.age)
        print('name: ', self.name)

class Shape(object):
    def __init__(self, shape):
        self.shape=shape
    def Print(self):
        print(self.shape)

class Dog(LivingThings, Shape):
    def __init__(self, breed, age , name, shape):
        self.breed=breed
        super().__init__(age , name)
        super().__init__(shape)


    def Print(self):
        LivingThings.Print(self)
        Shape.Print(self)
        print('breed', self.breed)

但错误:

1
2
super().__init__(shape)
TypeError: __init__() missing 1 required positional argument: 'name'

但是这个代码是有效的:

1
2
3
4
5
class Dog(LivingThings, Shape):
    def __init__(self, breed, age , name, shape):
        self.breed=breed
        Shape.__init__(self, shape)
        LivingThings.__init__(self,age ,name)

那么super()剂量在多重继承中起作用??


在多重继承中,super起作用很好;事实上,这正是它的作用。但出于某种原因,你两次用不同的论据来称呼它,这不是它的工作原理。

叫它一次。调用方法解析顺序中的下一个方法。然后,该方法的责任就是调用super,调用下一个方法。

请阅读RaymondHettinger的经典文章Super Considered Super。