Python
__init__与其他语言的 构造函数 之间的关键区别在于,
__init__它 不是 构造函数:它是一个
初始化程序 (实际的 构造函数 (如果有,但是请参阅下文;-)是
__new__并且再次完全不同。虽然 构建
所有超(,毫无疑问,这样做,你继续向下构建“之前”)显然是说你的一部分 构建 一个子类的实例,这显然是不适合的情况下 初始化
,因为在许多用例中,超类的初始化需要被跳过,更改和控制-发生在子类初始化的“中间”,如果发生的话,等等。
基本上,出于完全相同的原因,初始化程序的超类委派在Python中不是自动的,此类委派对于 任何 其他方法也不是自动的-请注意,那些“其他语言”对
任何 其他方法都不会自动进行超类委派其他方法… 只是 针对构造函数(如果适用,则为析构函数),正如我提到的,这 不是
Python的
__init__方法。(的行为
__new__也很特殊,尽管实际上与您的问题没有直接关系,因为它
__new__是一个奇特的构造函数,实际上并不一定需要构造任何东西-
可以很好地返回现有实例,甚至是非实例) …显然Python为您提供了 很多 更多的控制机制的比“其他语言”你心目中,其中 还
包括具有在没有自动代表团
__new__本身- !)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)