1、继承(核心)
认识继承:继承权,作为儿子、女儿你就有继承权
代码中继承:
生物 动物 哺乳动物 人类 男人累、女人泪
(1)概念方面理解,越来越小
(2)从特征方面理解,越来越大,后面的不仅有前面的特征,而且还有自己独有的特征
从概念上,前面最大
从特征上,后面最大
代码中的理解,就是从特征上理解的,前面叫做父类,后面的叫做子类
父类 子类
生物 动物
动物 哺乳动物
人类 女人泪
子类的属性肯定是要多于父类的,子类不仅有父类的属性(通过继承),还有自己独有的属性
关键词理解
父子类的叫法
父类 子类
基类 派生类
超类 派生类
继承和派生:其实是同一个概念,如果从子类角度理解,那么就是子类继承父类,如果从父类角度理解,那么就是父类派生出了子类
单继承:子类只能拥有一个父类
多继承:子类可以拥有好多父类
Python是支持多继承,但是一般都只用单继承
继承语法
object: 是官方的一个基类,是所有类的父类,任何类都是直接或者间接继承自object
子类继承父类,就拥有了父类的所有属性和方法
重写(重载)
完全重写:父类的方法在子类中不合适,子类需要完全重写这个方法
【注】重写的时候可以添加参数,可以随意定制返回值
子类对象调用的方法为重写过后的方法
增加功能:父类的方法在子类不是完全不合适,子类需要在父类的基础上增加一定的功能
super().work() 调用的是上一级的work方法
父类名.work(self) 调用指定父类的work方法
构造方法重写
【注】如果这个类继承了第三方类,一般情况都要手动调用父类的方法
多继承
语法:就是小括号里面写多个父类,中间以逗号隔开
调用继承方法的时候,有顺序, 可以通过 类名.mro 来进行查看查找方法的顺序
【注】通过子类创建对象的时候,如果子类中没有构造方法,那么就会调用父类的构造方法,如果是多继承的关系,会按照 类名.mro 顺序去调用构造方法
2、私有属性、私有方法
在其它的面向对象语言中,成员属性会有一些访问修饰符,这些不同的访问修饰符在使用属性、继承属性的时候功能不一样,修饰符有三个:公共的、受保护的、私有的
在Python里面全部废掉,Python里面只有一种,公共的
凡是以 __开头的属性都是私有属性,私有属性只能在类内访问,不能再类外访问,如果想要在类外访问,那么这个类必须给你提供set、get方法才行
凡是以 __开头的方法都是私有方法,私有方法只能在类内访问,不能再类外访问
3、类属性
前面学的属性叫做成员属性、对象属性,必须创建对象之后,对象才有这些属性
类属性:类属性不是属于某一个对象,而是属于这个类的,属于所有对象的
调用格式
类名.类属性名
对象名.类属姓名
【注】对象属性只能由对象名调用,类属性可以有类名、对象名进行调用
【注】当通过对象名调用类属性和对象属性的时候,优先调用对象属性(同名的时候)
【注】如果要修改类属性,只能通过类名进行修改,如果通过对象名修改,其本质是动态的给对象添加了一个成员属性
4、类方法、静态方法
类方法:不属于某个对象,而是属于整个类
书写格式:在方法的上面用装饰器修饰一下 @classmethod
【注】类方法的第一个参数必须是 cls
【注】在类方法中,可以通过cls访问类属性,也可以通过cls创建对象
【注】在类方法中,不能出现self
调用格式:
类名.类方法()
对象名.类方法()
静态方法:在方法上面添加 @staticmethod
【注】静态方法没有第一个参数
调用格式:
类名.静态方法名()
对象名.静态方法名
【注】静态方法名和对象方法同名的时候,通过对象调用的时候下面的覆盖上面的
5、类常用属性