今天在用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在前向兼容性上还有待提高!