在昨天子类可以继承父类的基础上,其实还可以给子类单独定义属性和方法,区别于父类的独特属性和特有方法是子类的特点。代码如下:
1、以姓名和年龄定义父类及方法;
2、定义子类并添加子类特有属性及方法;
3、创建子类实例,调用实例及方法实现名字及特有属性和特有方法。
1、定义子类时使用了指定属性(dog_papa)默认值的方式;
2、其他几乎没有什么变化,只是在继承父类属性时使用了父类名.__init__(self,name,age)的方式实现了父类属性的继承;
3、定义了子类自己的方法cry,表示小狗在叫;
通过运行结果可以看出子类也可以指定自己的属性,并且可以赋默认值;通过2中的方式也可实现父类属性的继承,效果应该跟使用super()方法一致;子类定义方法后,创建实例、调用方法和父类方式相同。为验证继承父类的不同方式有相同效果,对代码改动如下:
二者比较可以发现方式2更简洁直观,只是句点后的__init__()方法要包含所有的父类属性(包括self,而super方式却不需要)。
试一下让两种方式并存发现代码任然可以运行且不冲突:
查阅相关资料后发现可以有几种方式实现父类的属性和方法继承,效果相同。
偶然看到子类继承父类属性时可以不用__init__()方法,但是为了更好地继承父类的行为且在子类中通常需要初始化新的属性,这一步骤还是必要的。