短版(tl; dr)
我正在学习PySide,大多数在线教程都使用 super
初始化UI元素。这是重要的(即,更具可扩展性),还是品味问题?
澄清:正如我在详细版本中更清楚,这不是另一个通用线程,询问何时使用 super
(这是以前做过的)。相反,考虑到使用的PySide教程的数量 super
代替 <class>.__init__
,我想弄清楚是否使用 super
是PySide应用程序的标准?如果是这样,是因为情况所在 super
被称为(涉及解决继承)在PySide / PyQt的使用中出现了很多?或者这是品味问题。
详细版本
我是Python新手,目前正在使用Zets教程学习PySide(http://zetcode.com/gui/pysidetutorial/firstprograms/)。本教程中的第二个示例包括:
from PySide import QtGui
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(300,300,250,150)
self.setWindowTitle("PySide 101: Window the First!")
self.show()
app=QtGui.QApplication(sys.argv)
ex=Example()
sys.exit(app.exec_())
这工作正常,但我从未使用过 super
。因此,我重写了上面的代码,成功替换 super
更多标准显式调用父类:
QtGui.QWidget.__init__(self)
但是当我在网上搜索PySide教程时(例如, http://qt-project.org/wiki/PySide-Newbie-Tutorials), 他们 所有 包括打电话 super
。我的问题是:我应该使用 super
用于PySide脚本?
看起来 super
当你有继承钻石时,它似乎最有用,它倾向于以合理的方式解决多重继承的实例。是 super
PySide使用了很多,因为这些钻石的案例占优势,我会面对更现实的复杂例子吗? [编辑:否:请参阅下面的答案。]
我为什么要问? 为什么不用 super
并完成它?
我问,因为我用来学习Python的书(学习Python,由Lutz撰写)花费了20多页关于 super
,和 明确警告不要使用它。他建议新的Python用户在使用它之前采用更传统,更明确的路线(例如,参见第832页,学习Python的第1041-1064页,第5版)。他基本上将它描绘成一种非剧性的,神秘的,很少需要的新风格,刚开始时你应该非常谨慎地对待它,并认为它被有经验的用户过度使用。
此外,查看两个主要的PySide / PyQt项目(Spyder和pyqtgraph)的源代码,两者均未使用 super
。 One(Spyder)明确告诉贡献者出于兼容性原因而避免使用它(http://code.google.com/p/spyderlib/wiki/NoteForContributors)。
注意我链接到下面一个密切相关的帖子,但那里的答案更普遍地讨论你想要使用 super
(当你有多重继承时)。我的问题是PySide脚本是否合理,甚至要求使用 super
从长远来看,或者是否更具Pythonic,并且出于兼容性原因,更明确地命名父类?还是味道问题?
如果它不受欢迎(正如我的初学者所说)为什么它在针对初学者的PySide教程中如此普遍?如果它有所不同,那么编写这些教程的人似乎都是经验丰富的Java程序员,或者适合这样的程序员。我不是。
相关话题
http://www.riverbankcomputing.com/pipermail/pyqt/2008-January/018320.html