Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-为什么在_uinit__u;()期间调用方法_Python_Qt - Fatal编程技术网

Python-为什么在_uinit__u;()期间调用方法

Python-为什么在_uinit__u;()期间调用方法,python,qt,Python,Qt,我一直在看一些PyQt4的教程,它很好,但我不太明白为什么创建对象时语法是这样的: class Example(QtGui.QMainWindow): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): #code to set up instance variables and

我一直在看一些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()
调用,而且在调用
super
之后,将任何设置属性的代码放入
\uuuu init\uuuu()
中,还能得到什么呢?

有时为了可读性的目的,代码被分成函数

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

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

在您自己的问题中,您还暗示了重用的第三个原因:如果子类需要更改初始化部分发生的顺序(或者完全忽略/替换某些部分!),那么使用单片
\uuuuuu init\uuuu
是不可能的,但是如果将其拆分为单独的部分,则很容易做到这一点

第四个也是最后一个原因是分析。如果跟踪函数项/存在项和计时,则单独的函数可以在计时度量中提供更精细的粒度


无论如何,如何编写代码取决于您自己,但您在这里提出的方法确实有优点。

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

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

最有可能是为了可读性和重用。在许多语言中,这是为了在多个构造函数之间重用代码。如果您想在某个时候重新初始化对象,或者在不调用
initUI
的子类中重写,或者以不同的方式调用它,那么它也很有用。确实,为什么要调用方法呢。我很抱歉问了一个你可能知道答案的问题。谢谢你的明确回答。既然已经向我解释了这一点,这当然是有道理的:)