python魔法方法-构造方法详解

本文详细介绍了Python中的构造方法`__init__`,它在类实例化时执行,用于初始化对象属性。文章讨论了传参给构造方法时如何覆盖默认值,并阐述了在继承中重写构造方法的重要性。通过示例展示了如何正确地调用超类构造方法,确保对象的基本初始化,并提到了使用`super()`函数进行方法解析的方法。
摘要由CSDN通过智能技术生成

构造方法:

 “__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数。那么我们就可以把要先初始化的属性放到这个函数里面。

      

如果给构造方法传入几个参数,会发生什么情况呢?

创建对象时若传入值,则会覆盖默认值:

   

重写一般方法和特殊的构造方法:

对于继承:每个类都可能有一个或多个超类,它们从超类那里继承行为方式,如果一个方法在子类的一个实例中被调用,但在子类中没有该方法,那么就会去超类中寻找;

   

当然,可以通过重写的方式,自定义继承的行为,比如B类重写hello方法:

   

重写是继承中的重要机制,对于构造方法尤其重要,构造方法用来初始化新创建对象的状态,大多数子类不仅要拥有自己的初始化代码,还要拥有超类的初始化代码。

如果一个构造方法被重写,那么需要调用超类的构造方法。

    

   

第一次子类调用父类中的eat方法失败,因为在子类中,构造方法被重写,但新的构造方法没有任何关于初始化hungry的特性的代码,所以调用失败;

要达到预期效果,子类的构造方法必须要调用其超类的构造方法来确保进行基本的初始化;例如第二次操作成功。

或者使用super函数来达到同样效果:

    

不用担心super返回的是什么,假装返回的是所需的超类,实际上它返回了一个super对象,这个对象负责进行方法解析,当对其特性进行访问时,它会查找所有的超类(以及超类的超类),直到找到所需的特性为止(或者引发AttributeError异常)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值