Python 调用super初始化报错 "super() argument 1 must be type, not classobj"

在Python中遇到`super()`报错:`TypeError: super() argument 1 must be type, not classobj`。该错误发生在尝试在非新式类中使用`super`时。解决方案是在子类中确保至少有一个超类继承自`object`,这样就可以正确使用`super`进行初始化。在Python3之后的版本中,所有类默认都是新式类,但在Python2.2之前的版本,需要显式继承`object`来创建新式类。" 99709773,8472547,理解Django路由配置与管理,"['Django路由', 'urls.py', 'Python Web开发', 'Web框架']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python3.0不存在,旧版本可能报错:

class A():
    def __init__(self):
        print('A')

class B():
    def __init__(self):
        print('B')

class C():
    def __init__(self):
        print('C')

class Asub(A):
    def __init__(self):
        print('Asub')
        super(Asub, self).__init__()

class Bsub(B):
    def __init__(self):
        print('Bsub')
        super(Bsub,self).__init__()

class Csub(C):
    def __init__(self):
        print('Csub')
        super(Csub, self).__init__()

class E(Asub, Bsub, Csub):
    def __init__(self):
        print ('E')
        Asub.__init__(self)
        Bsub.__init__(self)
        Csub.__init__(self)

d = E()

在子类Asub中调用super初始化时发生错误:其中A为超类,仔细检查并无语法错误。 super(Asub, self).init() TypeError: super() argument 1 must be type, not classobj 原因如下: 在python2.2版本之前,直接调用超类的方法,后来改成通过super来调用,原因是为了解决多重继承中的钻石形状问题。python里的super只能用在新式类中,不能用于以前的经典类,如果基类是经典类则会出现这个错误。 解决的方法是Asub只要有一个超类是Object就OK了。 例如: A(object):…………….

class A(object):#!!!!!!!based in object!!!!!!
    def __init__(self):
        print('A')

class B(object):
    def __init__(self):
        print('B')

class C(object):
    def __init__(self):
        print('C')

class Asub(A):
    def __init__(self):
        print('Asub')
        super(Asub, self).__init__()

class Bsub(B):
    def __init__(self):
        print('Bsub')
        super(Bsub,self).__init__()

class Csub(C):
    def __init__(self):
        print('Csub')
        super(Csub, self).__init__()

class E(Asub, Bsub, Csub):
    def __init__(self):
        print ('E')
        Asub.__init__(self)
        Bsub.__init__(self)
        Csub.__init__(self)

d = E()

注意:构造类的时候,习惯性继承基类object!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值