Python - 为什么在__init __()期间调用方法

时间:2013-01-14 04:48:17

标签: python qt

我一直在寻找一些PyQt4的教程和It Is Good,但是我不太明白为什么创建对象时的语法是这样的:

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中设置属性的任何代码?

3 个答案:

答案 0 :(得分:14)

为了便于阅读,有时会将代码分成多个函数。

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

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

你还暗示了在你自己的问题中重用的第三个原因:如果一个子类需要改变初始化部分发生的顺序(或完全省略/替换一些部分!),这是不可能的单片__init__但如果它被分成不同的部分则很容易。

第四个也是最后一个原因是分析。如果您跟踪功能条目/存在和时间,则单独的功能可以在时序指标中提供更精细的粒度。

无论如何,您的编码方式取决于您 - 但您在此处提出的问题确实具有优点。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我所知道的只有一个原因,与大多数语言相同 - 可用性。面向对象编程的核心是重用事物的能力 - 无论是类,方法还是变量。通过分离我们不同的方法/功能,我们可以稍后调用它们。无论你是否稍后再打电话给他们......这是值得商榷的。我认为这取决于良好的编程实践。