Python:为什么要调用'__init__'而不是className()?

4 投票
1 回答
974 浏览
提问于 2025-04-18 11:14

因为调用 className() 会执行 __init__(args) 里面的代码,下面的代码中为什么还要有人明确调用 __init__ 呢?

class Example(Frame):

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

这两种方法调用之间实际执行的代码有什么区别吗?还是说选择 __init__() 而不是 className() 只是随便的选择?

运行的是 Python 3.4

1 个回答

9

className() 不仅仅是调用 __init__ 方法。它还会调用 __new__ 方法,这个方法的作用是创建一个新的类实例。所以,当你调用 Frame() 时,并不会在同一个 self 对象上进行父类的初始化,而是会创建一个新的对象并对这个新对象进行初始化。

你在想要对已经创建的特定实例运行 仅仅 __init__ 方法时,才会调用 __init__。通常这种情况就像你展示的那样,你希望让父类在子类的初始化之上进行初始化。

撰写回答