很多书和资料都把__init__视为python class实例的构造器,如果你是学习静态语言比如java/Csharp或者c++出身的,你会发现__init__与静态语言的构造器有很大出入,换句话说,如果你真的以为__init__就是constructor,那你可能会被下面的诡异现象逼疯,按照诡异程度,依次为:
- 1.构造器执行时,实例已经被构造好了???
- 2.子类实例化时,父类的构造器可以被不调用???
- 3.构造器可以继承???
一条条的说:
1. 这个是首先被注意到的,self是什么鬼?:
class Base:
def __init__(self, a, b=1):
print("Base __init__")
都说self是实例方法被调用时,解释器自动传入指向当前实例的指针。那么,__init__如果是构造器,就是说构造器还未执行,对象就已经存在了?

Python的__init__并非传统意义上的构造器,它是一个初始化函数,可以在实例创建后进行设置。在实例化过程中,__new__方法先于__init__执行,负责对象的创建,而__init__用于执行初始化操作。子类可以不调用父类的__init__,但这可能导致父类的一些初始化工作未完成。__init__是可以继承和重写的,理解这一点有助于避免对Python类构造过程的误解。

280

被折叠的 条评论
为什么被折叠?



