python 3内部类的子类化
在python 3.5.2中,以下类层次结构: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__()
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,这是我经常忘记的事情之一:)