在嵌套类中使用super

Toc*_*Toc 2 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()
Run Code Online (Sandbox Code Playgroud)

但是如果我们在类B的范围之外提取类的定义A,一切都很好.

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

Dan*_*man 7

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

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