![](/img/trans.png)
[英]Multiple inheritance using Super(Subclass, self) in python 2.7
[英]calling super subclass in python 2.7
我正在尝试了解python中的一些基本OOP。 如果我尝试对诸如list之类的类进行子类化,该如何调用父构造函数? 修补了片刻之后,我发现它是:
super(subclass_name, self).__init__(args).
但是我不直观地理解这一点。 为什么我不能只列出(args)? 要么
list.__init__(args)?
以下是相关代码段:
class slist(list):
def __init__(self, iterable):
#super(slist, self).__init__(iterable) <--- This works)
list.__init__(iterable) # This does not work
self.__l = list(iterable)
def __str__(self):
return ",".join([str(s) for s in self.__l])
list.__init__(iterable)
缺少其中列出来初始化信息,并list(iterable)
建立不同的名单完全无关你想初始化一个。
如果您不想使用super
,则可以执行list.__init__(self, iterable)
。
list.__init__(iterable)
不正确。 您需要告诉__init__()
它正在初始化哪个对象。 list(args)
更不正确,因为它创建了一个全新的列表对象,而不是初始化您的对象。 它调用list.__new__()
而不是list.__init__()
。 您需要将self
传递给构造函数调用以正确初始化父类:
list.__init__(self, args)
那会起作用。 尽管通常使用super()
可以使语法更简洁。 例如,以上内容可以重写为:
super(slist, self).__init__(args)
但是,鼓励您使用super()
而不是简单地调用父构造函数,主要原因是您具有多个继承。 super()
将自动以正确的顺序调用每个父类的构造函数。 这与Python的“ 方法解析顺序”密切相关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.