python 3内部类的子类化

python 3内部类的子类化,python,python-3.5,subclassing,Python,Python 3.5,Subclassing,在python 3.5.2中,以下类层次结构: class Foobaz(object): def __init__(self): pass class Foo(object): def __init__(self): pass class Baz(Foobaz): class Bar(Foo): def __init__(self): super(Bar, self).__init__()

在python 3.5.2中,以下类层次结构:

class Foobaz(object):
    def __init__(self):
        pass


class Foo(object):
    def __init__(self):
        pass


class Baz(Foobaz):

    class Bar(Foo):
        def __init__(self):
            super(Bar, self).__init__()

    def __init__(self):
        super(Baz, self).__init__()
        self.bar = self.Bar()


if __name__ == '__main__':
    b = Baz()
实例化Baz类会产生

    super(Bar, self).__init__()
NameError: name 'Bar' is not defined

有一个直接从object派生的内部类——也就是说,不调用super——就可以了。我不知道为什么。有人能解释一下吗?

条不可见,它是一个类变量。您需要明确说明:

super(Baz.Bar, self).__init__() 
请注意,
super
的无参数形式为您解决了以下问题:

super().__init__()

工作正常。

条码不可见,它是一个类变量。您需要明确说明:

super(Baz.Bar, self).__init__() 
请注意,
super
的无参数形式为您解决了以下问题:

super().__init__()

很好。

太好了,谢谢。这会让我的生活更轻松。但是,这两种可能的方法中哪一种更可取呢?如果您编写的代码试图不确定版本,请使用第一种方法。如果你不同意第二条,删除关于“理想”的评论。在super中使用
类型(self)
是一个很大的错误@wim由于从未使用Python 2,这是我经常忘记的事情之一:)太好了,谢谢。这会让我的生活更轻松。但是,这两种可能的方法中哪一种更可取呢?如果您编写的代码试图不确定版本,请使用第一种方法。如果你不同意第二条,删除关于“理想”的评论。在super中使用
类型(self)
是一个很大的错误@wim由于从未使用Python 2,这是我经常忘记的事情之一:)