Python学习 Day7
面向对象-继承
子类默认继承父类的所有属性和方法

在Python中,所有类默认继承object类,object类是顶级类或基类;其他子类叫做派生类
1、单继承
一个子类只继承一个父类
2、多继承、
一个类同时继承多个父类,当一个类有多个父类的时候,默认使用第一个父类的同名属性和方法

3、子类重写父类同名方法和属性


4、子类调用父类的同名方法和属性

5、多层继承

6、super()调用父类方法
super(当前类名,self).函数() 或 super().函数名()



使用super()可以自动查找父类。调用顺序遵循__mro__类属性的顺序。比较适合单继承使用
7、私有权限
在Python中,可以为实例属性和方法设置私有权限,即设置某个实例属性或实例方法不继承给子类 设置私有权限的方法:在属性名或方法名前面加两个下划线 __

私有属性和私有方法只能在类的里面访问和修改
8、获取或修改私有属性值
在Python中,一般定义函数名 get_xx用来获取私有属性,定义set_xx用来修改私有属性值

面向对象-多态
1、面向对象的三大特性
1、封装: 将属性和方法书写到类的里面的操作即为封装 封装可以为属性和方法添加私有权限 2、继承: 子类默认继承父类的所有属性和方法 子类可以重写父类属性和方法 3、多态: 传入不同的对象,产生不同的结果
2、多态
多态是指一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 定义:多态是一种适用对象的方法,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行结果 好处:调用灵活,有了多态,更容易编写出通用代码,做出通用编程,以适应需求的不断变化。 步骤: 定义父类,并提供公共方法。 定义子类,并重写父类方法 传递子类对象给调用者,可以看到不同子类执行效果不同

类属性和实例属性
1、设置和访问类属性
类属性就是类对象所拥有的属性,它被该类的所有实例对象所共有 类属性可以使用类对象或实例对象访问

类属性的优点 1、记录的某项数据 始终保持一致时,则定义类属性 2、实例属性要求每个对象为其单独开辟一份内存空间来记录数据,而类属性为全类所共有,仅占用一份内存,更加节省空间
2、修改类属性
类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了一个实例属性。

类方法和静态方法
1、类方法
1.1、类方法特点
需要用装饰器 @classmethod 来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数
1.2、类方法使用场景
1、当方法中需要使用类对象(如访问私有类属性等)时,定义类方法 2、类方法一般和类属性配合使用
2、静态方法
2.1、静态方法特点
1、需要通过装饰器 @staticmethod 来进行修饰,静态方法既不需要传递类对象也不需要传递实力对象(相参没有self/cls)
2、静态方法 也能通过 实例对象 和 类对象 去访问

2.2、静态方法使用场景
1、当方法中即不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象(如类属性、类方法、创建实例等)时,定义静态方法
2、取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗

