我理解为什么当一个类是超类的子类时使用了super(),但是什么是未指定子类参数中的超类的类的超类?这是我的代码:
import random
class Sneaky:
sneaky = True
def __init__(self, sneaky=True, *args, **kwargs):
super().__init__(*args, **kwargs)
self.sneaky = sneaky
def hide(self, light_level):
return self.sneaky and light_level < 10
class Agile:
agile = True
def __init__(self, agile=True, *args, **kwargs):
super().__init__(*args, **kwargs)
self.agile = agile
def evade(self):
return self.agile and random.randint(0, 1)
答案 0 :(得分:8)
假设Sneaky
用作多继承类结构的一部分,例如:
class Sneaky:
sneaky = True
def __init__(self, sneaky=True, *args, **kwargs):
super().__init__(*args, **kwargs)
self.sneaky = sneaky
def hide(self, light_level):
return self.sneaky and light_level < 10
class Person:
def __init__(self, human=True, *args, **kwargs):
super().__init__(*args, **kwargs)
self.human = human
class Thief(Sneaky, Person):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
t = Thief()
print(t.human)
# True
由于
In [62]: Thief.mro()
Out[62]: [__main__.Thief, __main__.Sneaky, __main__.Person, object]
Thief.__init__
的{{1}}来电super().__init__(*args, **kwargs)
。Sneaky.__init__
的{{1}}来电Sneaky.__init__
。 如果从super().__init__(*args, **kwargs)
移除Person.__init__
来电,那么super().__init__
会提出
Sneaky.__init__
因为t.human
不会被调用。