Python,super()

时间:2017-08-23 11:46:47

标签: python-2.7 super

我试图理解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__()

2 个答案:

答案 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