使用面向对象继承开发时经常遇到的一种情况,重写。继承:子类拥有父类的所有属性和方法。子类继承父类,愿意直接享受父类中封装的方法,无需重新开发。应用场景:当父类的方法实现不能满足子类的需要时,可以重写(override)方法。Dog类中虽然有barking方法,但是如果因为小天狗是神犬,所以barking方法和普通狗不一样,所以Dog类中的bark方法不满足,必须重写bark方法此时。重写父类方法有两种情况:重写父类的方法扩展父类方法1.重写父类的方法如果父类的方法实现与子类的方法实现完全不同开发中,可以使用重写的方式,在子类中重写父类的方法实现。具体实现方法:相当于在子类中定义一个与父类同名的方法并实现。重写后,在运行时,只会调用子类中重写的方法,不再调用父类封装的Methods。代码体验:classAnimal():defeat(self):print("eat")defrun(self):print("run")defdrink(self):print("drink")defsleep(self):print("Sleep")classDog(Animal):defbark(self):print("barking")classXiaotianQuan(Dog):deffly(self):print("Icanfly,haha??haha")defbark(self):print("天来知音")#创建一个小天泉对象xtq=XiaoTianQuan()#如果在子类中重写了父类方法#当使用子类对象调用方法时,会调用子类的执行结果重写方法xtq.bark()的说明:注意:如果小天全类中没有重写bark方法,那么执行结果会是barking,因为此时仍然调用了父类中的bark方法。2.扩展父类的方法如果在开发的时候,子类的方法实现包含了父类的方法实现,而父类原本封装的方法实现是子类方法的一部分,可以使用扩展方法。1、扩展的方法:在子类中重写父类的方法,使用super()。父类方法在需要的位置调用父类方法的执行代码代码实现2.关于super在python中,super是一个特殊的类。super()是使用超类创建的对象。最常用的场景就是在重写父类方法的时候,让super()。类中封装的方法实现代码体验:功能需求:不仅要狗叫,还要天籁之音。类动物():defeat(self):print(“吃”)defrun(self):print(“run”)defdrink(self):print(“drink”)defsleep(self):print(“sleep")classDog(Animal):defbark(self):print("barkingbark")classXiaotianQuan(Dog):deffly(self):print("Icanfly,haha??haha")defbark(self):#1.针对子类的具体需求,编写代码print("SoundofNature")#2.使用super()。调用父类中原本封装的方法super().bark()#3.添加其他子类代码print("OKOKOKOKOK")#创建小天泉对象xtq=XiaoTianQuan()xtq.bark()执行结果:3.调用父类方法的另一种方式(知道)在python2.0中,如果需要调用父类的方法,也可以使用如下方法:父类姓名。method(self)目前python3.x支持该方法,不推荐使用该方法,因为一旦父类发生变化,方法调用位置的类名也需要修改。Tips:在开发过程中,父类名和super()方法不能混用。如果使用当前子类名调用方法,会形成递归调用,会出现死循环的代码体验:修改部分+关注部分。系统课程,适合初学者到精通全栈开发。
