面向对象
- python 是一门面向对象的语言
- 所谓的面向对象,就是在编程的时候尽可能的去模拟真实的现实世界
- 按照现实世界中的逻辑去处理问题
- 分析问题中参与其中的有哪些实体,这些实体应该有什么属性和方法
- 如何通过调用这些实体的属性和方法去解决问题
面向对象实例
IDE 调试
面向对象基本概念
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法
- 对象:类的实例
- 实例化:创建一个类的实例,类的具体对象
- 方法:类中定义的函数
- 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外
- 局部变量:定义在方法中的变量,作用域为当前的方法
- 实例变量:在方法内声明,需要加 self. 标识区分
- 私有属性,不能通过对象直接访问,在类的方法中可以访问
- 私有方法,不能通过对象直接访问,在类的方法中可以访问
实战 1
- 第一个类 Bicycle(自行车)类
- run() 方法,打印骑行公里数,骑行距离可以通过参数传入
- 第二个类 EBicycle 继承自 Bicycle
- volume(电量)属性
- fill_charge(vol) 充电方法
- run() 方法用于骑行,每骑行 10km 消耗电量 1 度
- 当电量消耗尽时调用 Bicycle 的 run 方法骑行
- 通过传入的骑行里程数,显示骑行结果
实战 1 需求分析
类的继承
- 被继承者:父类,又叫基类、超类
- 继承者:子类
- 子类可以继承父类的公共属性和方法
- 父类的私有属性、方法不会被子类继承,也不能被访问
- 可以通过调用继承的父类的共有方法,间接的访问父类的私有方法、属性
- 如果子类拥有和父类一样呢名字的方法,父类的方法将被覆盖(重写)
实战 2
- 一个回合制游戏,有两个英雄,分别是 EZ 和 JINX。
- 每个英雄都有 hp 属性和 power 属性,分别代表血量和攻击力
- EZ 初始值: hp,1100; power,190
- Jinx 初始值: hp,1000; power,210
- 每个英雄都有一个 fight 方法:
- hero_final_hp = hero_hp - enemy_power
- enemy_final_hp = enemy_hp - hero_power
- 对比 hero_final_hp 和 enemy_final_hp,血量先为零的人输掉比赛
实战2 优化 – 继承
- 后裔,后裔继承了 Hero 的 hp 和 power。并多了护甲属性。
- 重新定义另外一个 defense 属性:
- final_hp = hp + defense - enemy_power
- enemy_final_hp = enemy_hp - power
- 两个 hp 进行对比,血量先为零的人输掉比赛