Python 继承与 __init__ 函数

2 投票
4 回答
1865 浏览
提问于 2025-04-15 16:20

我在找一些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 中有效)。

撰写回答