Python 继承与 __init__ 函数
我在找一些pyQt的例子时,遇到了下面这种代码:
class DisplayPage(QWizardPage):
def __init__(self, *args):
apply(QWizardPage.__init__, (self, ) + args)
*args是什么意思呢?
在这种代码中使用apply的目的是什么呢?
4 个回答
1
“可变长度参数列表”: http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/
简单来说,就是把传给DisplayPage的__init__方法的所有参数,直接传给QWizardPage的__init__方法。
3
DisplayPage
是从 QWizardPage
这个类继承过来的。它的构造函数可以接受不定数量的参数(这就是 *args 的意思),然后把这些参数都传递给它的父类 QWizardPage
的构造函数。
更好的说法是:
super(DisplayPage, self).__init__(*args)
10
*args
的意思是 __init__
可以接收任意数量的位置参数,这些参数会被存储在一个叫 args
的列表里。想了解更多,可以看看这个链接:*args 和 **kwargs 是什么意思?
这段代码使用了已经不推荐使用的 apply
函数。现在你可以用以下三种方式来写:
QWizardPage.__init__(self, *args)
super(DisplayPage, self).__init__(*args)
super().__init__(*args)
第一行是对 apply
功能的直接翻译(在这种情况下不要使用它,除非 QWizardPage
不是 新式类)。第二种方式使用了 super
,这个用法在 PEP 367 中有定义。第三种方式同样使用了 super
,但这个用法是在 PEP 3135 中定义的(只在 Python 3.x 中有效)。