我一直在寻找一些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
中设置属性的任何代码?
答案 0 :(得分:14)
为了便于阅读,有时会将代码分成多个函数。
如果您的对象初始化需要三个步骤,那么逻辑上将它分成三个函数是有意义的。这些函数的名称可以描述它们处理的初始化部分。
您可能会看到从true __init__
调用的“init”函数的另一个原因是该函数是否将对象恢复到新状态;在这种情况下,您可能希望从例如对象池中的__init__
外部调用“clean”函数。
你还暗示了在你自己的问题中重用的第三个原因:如果一个子类需要改变初始化部分发生的顺序(或完全省略/替换一些部分!),这是不可能的单片__init__
但如果它被分成不同的部分则很容易。
第四个也是最后一个原因是分析。如果您跟踪功能条目/存在和时间,则单独的功能可以在时序指标中提供更精细的粒度。
无论如何,您的编码方式取决于您 - 但您在此处提出的问题确实具有优点。
答案 1 :(得分:0)
也许这样可以再次调用initUI。
答案 2 :(得分:0)
我所知道的只有一个原因,与大多数语言相同 - 可用性。面向对象编程的核心是重用事物的能力 - 无论是类,方法还是变量。通过分离我们不同的方法/功能,我们可以稍后调用它们。无论你是否将稍后再打电话给他们......这是值得商榷的。我认为这取决于良好的编程实践。