在嵌套类中使用super

时间:2016-11-07 13:29:29

标签: python inheritance

我对python 2.7.12中的以下错误感到困惑 假设我们在类中有一个类定义,类似于:

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


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


class A(D):

    class B(C):
        def __init__(self):
            # Strangely here B is "not defined", why?
            super(B, self).__init__()
            print "class B"

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

    def do_something(self):
        b_class = self.B()
        print "b_class within A : {}".format(b_class)


a_class = A()
a_class.do_something()

但是如果我们在类B的范围之外提取类A的定义, 一切顺利。

在嵌套类中调用时,我们是否需要以不同方式使用“super”?我无法理解为什么它的使用在嵌套类的内部或外部会有所不同。有什么指针吗?

2 个答案:

答案 0 :(得分:7)

问题不是子类或超类,而是嵌套。 B本身未定义,只有A.B

请注意,在Python中,几乎没有一个很好的理由来嵌套类。

答案 1 :(得分:4)

您需要使用其全名GROUP BY

B
A.B