由于调用className()
会执行__init__(args)
中的代码,为什么在下面的代码中有人明确调用__init__
?
class Example(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
在两个方法调用之间执行的实际代码是否存在差异,或者__init__()
对className()
进行简单随意的调整?
运行Python 3.4
答案 0 :(得分:8)
className()
不只是致电__init__
。它还调用__new__
,它创建了一个新的类实例。因此调用Frame()
不会对同一个self
对象执行超类初始化;它会创建一个新对象并初始化它。
如果您想在已经创建的特定实例上运行 __init__
,请致电__init__
。通常,这种情况类似于您所显示的情况,您希望让超类在子类的初始化之上进行初始化。