方法的重载
python中没有重载
参数没有类型,参数数量也是可变的
定义多个重名方法,只有最后一个有效
方法的动态性
可以动态的为类添加新方法,或动态的修改类已有的方法
私有属性和私有方法(实现封装)
- 两个下划线开头的属性是私有的
- 内部可以访问私有属性(方法)
- 外部不能直接访问
- 外部通过-类名-私有属性(方法)名访问
@property装饰器
可以将一个方法的调用方式变为”属性调用“ 不能设置属性 赋值
面向对象的三大特征
封装
隐藏对象的属性和实现细节,只对外提供必要的方法
继承
让子类具有父类的特性,提高了代码的重用性
语法格式
class 子类类名(父类1[,父类2,…])
类体
object类是所有类的父类
私有不能直接调用
类成员的继承和重写
成员继承:子类继承父类除构造方法之外的所有成员
方法重写:子类可以重新定义父类中的方法
mro()可以输出这个类的继承结构层次,方法解析顺序
dir()可以查看对象的所有属性
super()获得父类定义
object跟类
所有类都有object的属性和方法
重写_str_()方法
重写:子类可以重新定义父类中的方法,并且会覆盖父类中的方法
返回对象的描述
多重继承
一个子类可以有多个直接父类
多态
同一方法调用由于对象不同产生不同的行为
要点:
对态是方法的多态,属性没有多态
有两个必要条件:继承、方法重写
特殊方法和运算符重载
运算符实际上通过调用对象的特殊方法实现
特殊属性
对象的浅拷贝和深拷贝
浅拷贝:对象包含的子对象的内容不拷贝
深拷贝:递归拷贝对象中包含的子对象
变量的赋值:形成两个变量,实际还是指向同一个对象
b=Person()
c=b
组合
“is-a "可以使用继承,"has-a"可以使用组合
设计模式-工厂模式的实现
实现了创建者和调用者的分离
单例模式
确保一个类只有一个实例