面向对象 下
1、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
要点分析: a、封装,对象中嵌套对象 b、pickle,load 实例:s1.py (dump) s2.py(load) 类不存在(load会报错) 切记:一定要先导入相关类 class Foo: def __init__(self,name)
2、三大特性:
封装、继承、多态(补充):多种形态 多种类型
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def func(arg): (arg的形式 支持字典 字符串 列表 元组等)这就是多态 print(arg) func(1) func('alex') func([11,22,33]) c#/Java def func(int arg): #def func(A arg): 利用类的继承关系实现多态 arg参数必须是A类或者A的子类类型 print(arg) func(123) func('alex') #报错
3、面向对象中 类成员
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1、字段: 静态字段:静态字段在代码加载时已经创建 普通字段: s3.py 中self.name为字段 保存在对象中 每个对象存在一份 (普通/动态 字段) CC为字段 保存在类中 所有对象共用一份(静态字段) 内存占用率低 4.jpg 实例:s3.py 2、方法: 所有方法属于类 a、普通方法: 至少一个self 通过对象执行 s3.py (普通方法)show方法(方法属于类) b、静态方法: 任意参数 类执行 对象调用执行 s3.py (普通方法)show方法(方法属于类) 普通方法 变为(静态方法) F1方法: 静态方法由类调用执行 1、去掉self 2、方法上面加@staticmethod c、类方法: 至少有一个cls 由类执行 普通方法 变为(类方法) F2方法: 类方法由类调用执行 1、去掉self 2、方法上面加@classmethod 3、必须有一个cls参数(class缩写) cls参数自行传值无需赋值 3、属性 不伦不类的东西 具有方法的写作形式,具有字段的访问形式 s3.py f3方法 Pager类(分页) all_pager 上面加装饰器@property
属性:
4、成员修饰符 foo类
私有:
只能类自己本身成员内部可以访问(继承都不可以)
共有:
都可以访问
特殊情况:不到万不得已不使用在外部强制访问私有成员 _类名__xxx (xxx代表字段或者方法或属性)
5、特殊成员 (s5.py Foo类)
__del__ 析构方法(用不到)
__init__ 构造方法
__doc__ 注释
__module__ 模块位置
__class__ 类
__call__ 对象后面括号执行__call__方法
__str__ 类中含有__str__的话 本该返回对象的会返回__str__的值(画面友好) s5.py foo类
__dict__ 获取对象中封装的数据(特别特别特别重要) 直接访问 对象.__dict__
__getitem__ 支持字典的中括号 s5.py
切片也使用__setitem__方法
__setitem__ 支持字典的中括号 s5.py
切片也使用__setitem__方法
__delitem__ 支持字典的中括号 s5.py
切片也使用__setitem__方法
__iter__ 循坏对象就执行__iter__ (迭代器) s5.py
6、面向对象其他
isinnstance 对象是否为类(或其父类)的实例 s6.py
issubclass 前者是否为后者的子类
继承: 2.7
super() #主动执行父类的f1方法
应用:
字典:有序字典
自定义类型,对字典进行补充(有序字典)
8、单例模式(设计模式)
单(个实)例模式:用来创建单个实例