gpt4 book ai didi

python - 为什么在类未指定父类(super class)时使用 super().__init__(*args,**kwargs)?

转载 作者:太空狗 更新时间:2023-10-30 00:47:25 26 4
gpt4 key购买 nike

我理解为什么一个类是父类(super class)的子类时要使用super(),但是在子类参数中没有指定父类(super class)的类的父类(super class)是什么?这是我的代码:

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)

最佳答案

假设 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__

如果从 Sneaky.__init__ 中删除了 super().__init__ 调用,那么 t.human 将引发

AttributeError: 'Thief' object has no attribute 'human'

因为 Person.__init__ 不会被调用。

关于python - 为什么在类未指定父类(super class)时使用 super().__init__(*args,**kwargs)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50436857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com