二十一、面向对象3—继承:重写、调用父类的两种方法、super()、isinstance(obj, Class) 、多继承、私有的属性和方法的调用
一、继承的示例:
二、子类继承父类、父类的父类
三、在子类中重写父类的方法
在子类中再写一个父类有的方法,就会先使用自身类的方法,如果自身没有该方法,则会使用父类的方法。
调用的顺序:会先使用自身类的方法,如果自身没有该方法,则会使用父类的方法。
四、在子类中调用被重写的父类的方法(两种方法)
(1)第一种方法: 类名.方法名(self) 【类名:可父类可子类,再找相对应的方法调用】
如果自身有这个方法,先调自身的,打印出来,再执行 类名.方法名(self) 调(父类)的方法打印出来。
注意:在子类中调用被重写的父类的方法时,需要传递代表自身的self,否则会报错的
(2)第二种方法:
在父类中为不同的子类返回不同的数据信息:用super() 和 isinstance(obj, Class) 布尔函数
super().drink() 在子类中调用父类的方法
super(B,self).aaa(self) #B是处在当前的类,aaa方法后面的self可根据情况传与不传,不一定非得传self,也可传10,”B”之类 的,视情况而定。
super(C,self).aaa(self)
isinstance(obj, Class) 布尔函数:如果object是B类的实例对象,那么就返回真True。
isinstance(obj, Class) 布尔函数:如果object是一个A类的子类的实例对象则返回true。
五、知识点补充:Python super() 函数
super() 函数是用于调用父类(超类)的一个方法。
super 也是可以用来解决多重继承问题,这样父类就可以区分哪个子类调用了父类的方法。
六、issubclass(B,A) 判断B是否是A的子类,如果是返回True
七、私有方法、私有属性在继承中的表现
总结:
1、私有的属性和方法并不会被继承,只要是私有的东西就不会被继承的,也就是不能在子类中使用父类中的私有方法和私有属性。
2、私有的属性和方法只能在定义它们的类中公开一个方法里面调用,不能在子类中使用父类中的私有方法和私有属性。
八、多继承
所谓多继承,即子类有多个父类,并且具有它们的特征。
python是可以多继承的,父类中的方法、属性,子类会继承。
object类是所有类的基类,下面的object写与不写是一样的。
print(C.__mro__) C3算法,决定调用一个方法的时候,搜索的顺序,如果在某个类中找到了方法就停止搜索。
注意点: