3

我一直在看一些关于 PyQt4 东西的教程,它很好,但我不太明白为什么创建对象时的语法是这样的:

class Example(QtGui.QMainWindow):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):               

        #code to set up instance variables and show() the window

以这种方式执行此操作究竟获得了什么,而不仅仅是self.initUI()完全消除调用并将任何设置属性的代码放在调用__init__()之后super

4

3 回答 3

14

有时出于可读性目的,代码被分成函数。

如果您的对象初始化需要三个步骤,那么从逻辑上讲,将其分解为三个函数是有意义的。这些函数的名称可以描述它们处理的初始化部分。

您可能会看到从 true 调用的“init”函数的另一个原因__init__是该函数是否将对象恢复到新状态;在这种情况下,您可能希望从外部调用“clean”函数__init__,例如对象池。

您还暗示了在您自己的问题中重用的第三个原因:如果子类需要更改部分初始化发生的顺序(或完全省略/替换某些部分!)这对于单片机是不可能的,__init__但是如果将其拆分为单独的部分,则很容易。

第四个也是最后一个原因是分析。如果您跟踪函数条目/存在和时间,单独的函数可以为您提供更精细的时间指标。

无论如何,你如何编码取决于你——但你在这里质疑的方法确实有优点。

于 2013-01-14T04:56:35.480 回答
0

也许这样可以再次调用 initUI。

于 2013-01-14T04:57:23.690 回答
0

我只知道一个原因,与大多数语言一样——可用性。面向对象编程的核心是重用事物的能力——无论是类、方法还是变量。通过分离我们不同的方法/函数,我们可以稍后调用它们。你以后是否打电话给他们......这是有争议的。我认为这归结为良好的编程实践。

于 2013-01-14T04:59:11.610 回答