面向对象简单 记录

面向对象
1引子

狗大战
----多条狗,每个狗有名字,品种,攻击力
----可以有多个人
----狗可以咬人,人可以打狗

上帝视角---->>>编程
2编程范式 就是编程的套路
* 面向过程
PV --page visit, UV --user visit
3面向对象编程
OOP
3.1实例化,就是指用模板(class)生成的实体的过程,
对象--- 实例化生成的实体,就是对象
self 代表实例本身
类属性,类变量,公共属性,所有实例属性
实例属性,实例变量,成员变量,每个实例独享
3.2对象交互
3.3类和类之间的关系
1 依赖关系
2关联关系
3组合关系
4聚合关系
5继承关系
4.1 继承
带括号()例:class Person(Animal):
1person(子类) 继承 animal(父类)
2可以自己定义特性
3可以重构,父类已经有的
4.2重写父类方法
继承 super().__init__(name, age, sex)
self.hobbie = hobbie
多继承
多继承,按顺序,从左到右
class A:经典类
class B(object):新式类
python3 C3算法 广度优先,深度优先
4.3 C3算法
print (F.mro()) 显示顺序
4.4三大特征之封装
self.__lifeval = 100
私有属性 2个下划线(封装)
私有方法 2个下划线
实例名._类名 + 方法名()
4.5 实例:校园管理系统
1 定模型 , 多少个类
1)找出关键独立名词
总部 分校 学员 老师 员工 课程 班级

2 定属性
总部
名称,地址,电话,网址
财务账务,员工列表,发工资,开分校,招人
分校
pass
学员
姓名,年龄,班级,余额
上学打卡
转学 ?
交学费
老师
教学

员工
姓名,职务,部门,工资
上班打卡
课程
名称,价格,大纲
班级
校区
课程
学期
学员列表
转学。。
退学
上课记录
考试
3 定关系
分校--》总部
学员--》班级
班级--》课程
班级--》校区
老师--》班级
老师--》员工
学员--》老师
员工--》校区
4 画UML模型图
统一建模语言
5 写代码

5 面向对象的进阶
5.1 类方法, 静态方法
类方法,不能访问实例变量,只能访问类变量

why ?
因为Self这个参数接受的不是实例本身,而是类本身

有什么用?
class Student(object)
s1 +1
s2 +1
s3 +1

s3.stu_num 3
s2.stu_num 3

判断要不要stu_num计数的关键在于有没有生成实例

静态方法
@staticmethod
不能访问实例变量,也不能访问类变量

静态方法隔断了它跟类或实例的任何方法。。。

5.2 属性方法property
把一个方法变成 一个静态的属性(变量)

查机票
1. 连接各机场的航班系统
2. 查询信息
3. 对返回的信息进行处理,解析,显示给用户

飞机的 状态,价格
flight.status = 到达
5.3 神奇的反射
可以通过字符串的形式来操作对象的属性
class Person():
def__init__(self,name,age)
self.name = name
self.age = age
四种方法
hasattr
getattr
setattr
delattr

如何 反射 一个文件下 指定的字符串对应的属性

__name__ 在当前模块主动执行的情况下(不是被导入执行),等于 __main__
在被其他模块导入执行的情况下,等于模块名

5.4 动态加载模块
字符串形式 映射 为模块
import importlib
importlib.import_module("propery") #官方推介

5.5 类的双下划线方法
len方法

>>>str 与 repr
del 析构方法 (释放内存)

5.6 new 方法
__new__ 在 __init__ 前执行

new 方法实现单例模式
5.7 call 方法
s() # 实例名()就执行
类名() 就执行

6.1 动态产生一个类
dog_class=type("Dog", (object,),{"role":"dog","__init__":__init__})

7.1 异常处理
isinstance(obj,cls)
issubclass(sub,super)

把可能会发生错误,提前在代码里进行捕捉(监测)
try:
your code

except Exception as e: # exception 万能异常
出错后要执行的代码
强类型错误
SyntasError
Indentationrrrov
# 无法捕捉

异常基本语法

万能异常
try...else...finally
主动触发异常
raise

自定义异常
BaseException所有异常的基类
8.1 assert断言的用途
做单元测试











猜你喜欢

转载自www.cnblogs.com/huahuawang/p/12661357.html