Python:为什么要打电话' __ init __'而不是className()?

时间:2014-06-26 18:51:50

标签: python constructor initialization

由于调用className()会执行__init__(args)中的代码,为什么在下面的代码中有人明确调用__init__

class Example(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)   

在两个方法调用之间执行的实际代码是否存在差异,或者__init__()className()进行简单随意的调整?

运行Python 3.4

1 个答案:

答案 0 :(得分:8)

className()不只是致电__init__。它还调用__new__,它创建了一个新的类实例。因此调用Frame()不会对同一个self对象执行超类初始化;它会创建一个新对象并初始化它。

如果您想在已经创建的特定实例上运行 __init__,请致电__init__。通常,这种情况类似于您所显示的情况,您希望让超类在子类的初始化之上进行初始化。