python之super的问题

今天在用twisted框架时,遇到一个super的问题。

示例代码如下:

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


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


c = B()

报TypeError异常:

Traceback (most recent call last):
  File "C:/Workspace/echo_cred/test.py", line 15, in <module>
    c = B()
  File "C:/Workspace/echo_cred/test.py", line 11, in __init__
    super(B, self).__init__()
TypeError: must be type, not classobj

后来google了半天才发现,原来super 只能用在新式类中,不能用于以前的经典类,如果基类是经典类则会出这个错。

新式类:就是所有类都必须继承的类,如果什么都不想继承,就继承到object类。

经典类:没有父类


按照此思路,修改如下:

class A(object):
    def __init__(self):
        print "A"


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


c = B()

一切正常了!


看来python在前向兼容性上还有待提高!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值