Day15 python基础知识
方法没有重载
在其他语言中,可以定义多个重名的方法,只保证方法签名唯一即可,方法签名包含:方法名、参数数量、参数类型
python中,方法的参数没有类型(调用时确定类型),参数的数量也可以由可变参数控制。因此,Python中的方法是没有重载的
若定义了多个重名的方法,只有最后一个生效
方法的动态性
python是动态语言,可以动态地给类添加新方法,或修改类已有方法。(方法、函数也是对象,一切都是对象)
私有属性和私有方法(实现封装)
python中对于类的成员没有严格的访问控制限制,有如下要点:
1.通常约定,两个下划线开头的属性是私有的(private)。其他为公共的(public)。
2.类内部可以访问私有属性(方法)
3.类外部不能直接访问私有属性(方法)
4.类外部可以通过“_类名__私有属性(方法)名”访问私有属性
@property装饰器
将一个方法调用变成“属性调用”
面向对象三大特征
封装(隐藏)
隐藏对象的属性和实现细节,之对外提供必要方法
通过“私有属性、私有方法”的方式实现,蛋python无严格访问控制符,更多依靠程序员自觉实现
继承
继承可以让子类拥有父类的特征,提高了代码的重用性。
从设计上是一种增量进化,原有父类设计不变的情况下,可以增进新的功能
多态
多态是指同一个方法调用由于对象不同会产生不同的行为
继承
“代码复用”的重要手段
如果一个新类继承自一个已经设计好的类,就直接具备了已有类的特征,大大降低了工作难度,成为“父类”或者“基类”,新的类,我们成为“子类”或“派生类”
python支持多重继承,一个子类可以继承多个父类,语法格式如下:
class 子类类名(父类1[,父类2,...]): 类体
如果类定义重没有指定父类,则默认父类是object类(默认所有类的父类)可以使用对应默认方法
定义子类时,须调用父类的构造函数(逻辑上必须,不是语法上必须)
Day 16python基础知识
类成员的继承和重写
1.成员继承:子类继承了父类除构造方法外的所有成员。
2.方法重写:子类可以重新定义父类中的方法,这样就会覆盖父类中的方法,称为重写
查看类的继承层次结构
通过类的方法 mro() 或类的属性 _mro__ 可以输出这个类的层次结构
Object根类
object类是所有类的父类
方法也是属性,只不过可以通过()来调用
重写_str__ 方法
_str__()重写方法
多重继承
python支持多重继承,一个子类可以有多个“直接父类”,这样就具备了多个父类的特点,但由于这样会被“类的整体层次“搞得异常复杂,尽量避免使用
MRO()
允许多重调用的情况下,如果父类中有相同名字的方法,在子类没有指定父类名时,解释器将”从左到右“按顺序搜索
先调用哪个就执行哪个里的方法
MRO:Method Resolution Order,方法解析顺序,可以通过mro()方法获得层次结构,同样也是按照层次结构寻找解析顺序的
super()获取父类的定义
在子类中如果想要获取父类的方法,可以通过super()
注意获得的是父类的定义,而不是对象
多态
同一个方法调用由于对象不同产生不同的行为
注意:多态是方法的多态,属性没有多态
多态有两个必要条件:继承、方法重写
特殊方法和运算符重载
python 运算符其实是通过调用对象的特殊方法实现的,如
a=20 b=30 c=a+b(__add__)
特殊属性
对象的浅拷贝和深拷贝
浅拷贝:拷贝对象本身
深拷贝:递归拷贝对象中包含的子对象
组合
"is-a"关系,我们可以使用”继承“实现子类拥有父类的方法和属性。Dog is a animal,所以狗类应该继承动物类
”has-a"关系,我们可以使用“组合”,也能实现一个类拥有另一个类的方法和属性。MobilePhone has CPU,所以手机拥有CPU的方法和属性
设计模式——工厂模式实现
两种常用模式:工厂模式和单例模式
工厂模式实现了创建者和调用者的分离,使用专门的工厂类将选择实现类、创建对象进行统一管理和控制。
设计模式——单例模式实现
确保一个类只有一个实例,并且提供一哥访问该实例的全局访问点
单例模式只生成一个实例对象,减少开销,提高性能