Python-为什么在_uinit__u;()期间调用方法
我一直在看一些PyQt4的教程,它很好,但我不太明白为什么创建对象时语法是这样的: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
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
的子类中重写,或者以不同的方式调用它,那么它也很有用。确实,为什么要调用方法呢。我很抱歉问了一个你可能知道答案的问题。谢谢你的明确回答。既然已经向我解释了这一点,这当然是有道理的:)