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
。