一、类的继承(单继承和多继承)
继承是一种类间关系,描述一个类从另一个类中获取成员信息的类间关系。
继承必定发生在两个类之间,参与继承关系的双方成员是父类和子类。
1、语法:class 类名(父类名)
子类可以继承父类的所有属性和方法,就算自己没有,也可以使用父类的。
继承的传递性:
2、继承的分类
单继承:子类只继承一个父类
多继承:有两个父类的属性和方法,如果两个父类具有同名的方法的时候,调用就近原则
多继承:
定义格式: class 类名 (父类名1,父类名2,...):
pass
查看方法搜索顺序:
python中内置属性__mro__,可以查看方法搜索顺序,确定子类调用的方法顺序。
3、总结
- 多继承有同名方法时,在搜索方法时,会先按照mro的输出结果,从左往右的顺序查找
- 如果当前类的方法中找到了,就直接执行,不再搜索
- 如果找到最后一个类,还没有找到方法,程序报错
二、继承重写
如果从父类继承的方法不能满足子类的需求,可以在子类中重写父类的方法,这个过程称为方法的覆盖),也称为方法的重写。
1、覆盖父类的方法
在子类中定义一个跟父类同名的方法,会调用子类重写的方法。
2、在父类的方法后增加新的内容
- 第二种:super().方法名() (常用)
python中super是一种特殊的类,super()是使用super类创建出来的对象,可以去调用父类中的方法。
3、类的新式写法
- 类的三种写法
class 类名:
class 类名():
class 类名(object): ——>(新式写法)
以上三种写法并无区别,推荐使用新式写法,其中object是python中为所有对象提供的基类,里面提供了一些内置的属性和方法。
三、面向对象的多态
多态特征:一个对象具有多种形态, 在不同的使用环境中以不同的形态展示其功能, 那么我们就称该对象具有多态特征。
- 多态发生在具有继承关系的基础之上。
- 多态不关注对象的类型,只关注对象具有的行为
- 不同的子类对象,调用相同的父类方法,就会有不同的结果。
例如:“+”号,不同的对象使用,就会有不同的结果
1、第一种多态展示
2、第二种多态展示
定义统一接线口,一个接口,多种实现
四、静态方法和类方法
1、静态方法
- 使用装饰器:@staticmethod
定义格式:
class 类名:
@staticmethod
def 方法名(形参):
方法体
调用格式:
类名.方法名(实参)
对象名.方法名(实参)
2、类方法
类方法:针对类对象定义的方法
注意!!!类方法内部可以直接访问类属性,或者调用其他类方法。
定义格式:
class 类名:
@classmethod
def 方法名(形参):
方法体
调用格式:
类名.方法名(实参)
对象名.方法名(实参) 不常用
- 例1:在实例方法中访问类属性
- 例2:在类方法中访问类属性
在类方法中访问不了实例属性,会报错。
3、总结
- 实例方法:方法内部访问实例属性,方法内部可以通过类名、类属性名来访问类属性
- 静态方法:方法内部不需要访问实例属性和类属性
- 类方法:方法内部只需要访问类属性