gpt4 book ai didi

python - python中的super方法出现奇怪的错误?

转载 作者:行者123 更新时间:2023-12-01 04:35:06 24 4
gpt4 key购买 nike

我知道 super 应该用于在子类中启动父类(super class)。当我尝试在以下代码中执行它时,我不明白为什么会出现问题:

class A:
v = 3
def __init__(self, g):
self.g = g

class B(A):

def __init__(self, w):
self.g = 7
super().__init__(80)

然后在 shell 中,我尝试以下操作:

r = B(90)

但是,它会引发错误:

    super().__init__(80)
TypeError: super() takes at least 1 argument (0 given)

所以我尝试将该行修改为以下内容:

super(A).__init__(80)

但是当然,这也会引发错误:

 super(A).__init__(80)
TypeError: must be type, not classobj

事实上,无论我为 super 添加什么参数,我都无法让它发挥作用。适当的论据是什么?

谢谢。

最佳答案

您不能在旧样式类上使用super。在 Python 2 中,classes that don't inherit from object are old style (这种区别在 Python 3 中消失了)。

其次,您应该传递类 (B) 和实例 (self) 来调用实例方法。

class A(object):  # note object here
def __init__(self, g):
self.g = g

class B(A):
def __init__(self):
super(B, self).__init__(80)

B() # works

如果想使用旧式类并调用父类,直接引用即可。不过,您应该避免使用旧样式的类。

class B(A):  # where A doesn't inherit object
def __init__(self):
A.__init__(self, 80)

关于python - python中的super方法出现奇怪的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31846232/

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