我理解为什么当类是超类的子类时使用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)发布于 2018-05-20 16:28:58
假设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__的super().__init__(*args, **kwargs)给Sneaky.__init__打电话。Sneaky.__init__的super().__init__(*args, **kwargs)给Person.__init__打电话。如果将super().__init__调用从Sneaky.__init__中删除,则t.human将引发
AttributeError: 'Thief' object has no attribute 'human'因为Person.__init__不会被调用。
https://stackoverflow.com/questions/50436857
复制相似问题