Python 如何使嵌套类继承?

Python 如何使嵌套类继承?,python,class,inheritance,nested,Python,Class,Inheritance,Nested,我试图在另一个类中初始化一个继承类,但它不起作用,我不知道如何解决 我已经读到,继承通常按照以下方式工作: class Foo(object): def __init__(self, text): print text class Bar(Foo): def __init__(self, text): super(Bar, self).__init__(text) 但是,如果我将Bar-类放入另一个类中,代码就不再工作了 class Whate

我试图在另一个类中初始化一个继承类,但它不起作用,我不知道如何解决

我已经读到,继承通常按照以下方式工作:

class Foo(object):
    def __init__(self, text):
        print text

class Bar(Foo):
    def __init__(self, text):
        super(Bar, self).__init__(text)
但是,如果我将
Bar
-类放入另一个类中,代码就不再工作了

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

    def __init__(self, text):
        test = self.Bar(text)
Python与名称空间混淆:

super(Bar, self).__init__(text)
NameError: global name 'Bar' is not defined
怎么办?谢谢

问题解决了

您必须使用
which.Bar
引用
Bar
,因此它看起来是这样的:

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

    def __init__(self, text):
        test = self.Bar(text)

尝试将
Bar
引用为
which.Bar
。已尝试。作品谢谢!:)这与类继承无关。如果
继承自
对象
,仍然会得到相同的错误。如果
Bar
没有继承任何内容,则会发生相同的错误。这是因为当你把它改为另一个类的属性时,
Bar
不是一个全局的。@MartijnPieters你是对的,我没有正确地认为,一个在它自己的名称表中的类根本没有意义@LennartRegebro因为显而易见的原因:每一个
任何东西都需要一个
Foo
,但并不总是完全相同的…@user3424423:我实际上错过了
super()
行;我指的是
test=Bar(text)
行。你也可以使用
self.Bar
而不是
Whatever.Bar
。不,你不能。(不要问我为什么)这会产生错误
“Bar”没有属性“Bar”
实际上我知道原因。如果编写
self.bar
,python将在
bar
的本地名称空间中搜索
bar
。如果只写
,它会在
\uuu init\uuuu()
-方法的命名空间中搜索,如果没有找到任何内容,它会在全局命名空间中查找。您必须编写
Whatever.Bar
,因为
Whatever.Bar
在全局命名空间中,
Bar
不在其中。@user3424423:您需要在两个位置调整
Bar
引用。
Whatever.\uuuu init\uuuu
方法还需要限定
Bar
(它目前正在寻找一个全局变量)。在那里,您可以使用
self.Bar
以及
which.Bar