我试图理解super()在2.7中的工作原理。下面是我从stackoverflow中获取的代码。请帮助我理解我做错了什么?
我首先调用Base然后调用ChildA。这些工作正常。调用ChildB时会收到以下错误.TypeError:super()参数1必须是type,而不是classobj
class Base():
def __init__(self):
print "Base Created"
class ChildA(Base):
def __init__(self):
Base.__init__(self)
class ChildB(ChildA):
def __init__(self):
super(ChildB,self).__init__()
答案 0 :(得分:0)
问题是你的Base
班级正在使用旧的班级风格。要使用super
您的Base
类需要继承object
,如下所示:
class Base(object):
...
您的班级ChildA
不使用super
,因此ChildB
使用super
时会有效,因此会生成TypeError
。
答案 1 :(得分:0)
你没有通过superB传递childB类 你可以这样用得更好 def called_class(): 打印“课堂作业” 返回2
类Bar(对象): y = called_class()
def __init__(self, x):
self.x = x
def called_instance(): 打印“实例分配” 返回2
类Foo(对象): def init (self,x): self.y = called_instance() self.x = x
酒吧(1) 酒吧(2) FOO(1)
将父类和子类的所有属性继承到acess