面向对象和面向过程 面向过程 ? 概念:就是把对一个问题的解决通过一系列过程的来实现的(例如我要从北京去上海,那我第一步要先去天津,第二步去山东。。。。最后到上海) ?
面向对象和面向过程
面向过程
? 概念:就是把对一个问题的解决通过一系列过程的来实现的(例如我要从北京去上海,那我第一步要先去天津,第二步去山东。。。。最后到上海)
? 优点:复杂问题流程化
? 缺点:可扩展性差
面向对象
? 概念:就是把对一个问题的解决通过对象间的协作实现的(例如我要从北京去上海,给我一个车类,然后其他的就不管了,这个车类通过内部的行驶方法就能到达上海)
? 优点:可扩展性高
? 缺点:编写复杂
类与对象
定义类
? class (关键字)类名:
? pass
产生对象
? 对象 = 类名()
类
获取类的属性和方法
类.__dict__
类来调用属性和方法
通过dict来取(复杂,不用)
类名.属性/函数
对象
对象来调用属性和方法
对象.__dict__
对象来调用属性和方法
? 对象.属性/方法
产生对象(绑定方法,属性的查找顺序)
属性查找顺序
先从对象自身查找----->类中找------>报错
对象赋属性
方式一:
? stu1 = Student()
? stu1.name = ‘nick’
方式二:(通过__init__)
? 在类中定义该方法,方法上写一些参数
? 在对象实例化产生对象时,在括号中传的值,会被传到__init__中
绑定方法:
定义在类内部
对象来调用,会自动把对象传过来,在方法内部就可以修改该对象
一切皆对象
实战小游戏
主要是CF里面两个角色进行射击,攻击后血量减少,还可装备手榴弹
class Siwate: #定义一个斯沃特类 def __init__(self, name, gun='AK_47', armor = 28, aggrev = 329, life_value = 38888 ): # 绑定对象方法 self.name = name self.gun = gun self.aggrev = aggrev self.armor = armor self.life_value = life_value def attack(self, emeny): # 攻击(我方攻击力减对方护甲) life_damage = self.aggrev - emeny.armor emeny.life_value -= life_damage class OMOH: #定义一个奥摩类 def __init__(self, name, gun='M4A1', armor = 24, aggrev = 300, life_value = 33456 ): # 绑定对象方法 self.name = name self.gun = gun self.armor = armor self.aggrev = aggrev self.life_value = life_value def attack(self, emeny):# 攻击(我方攻击力减对方护甲) life_damage = self.aggrev - emeny.armor emeny.life_value -= life_damage s1 = Siwate("斯沃特") o1 = OMOH('奥摩') print(f'{s1.name}攻击了{o1.name}, {o1.name}的生命值是{o1.life_value}') s1.attack(o1) print(f'{s1.name}攻击了{o1.name}, {o1.name}的生命值是{o1.life_value}') class Frag: # 扔手雷 def __init__(self, aggressivity=10): self.aggressivity = aggressivity def update(last, now): now.aggrev += last.aggressivity #攻击力加成 def attack(self, emeny): # 直接攻击对方血量减1000 emeny.life_value -= 1000 f1 = Frag() s1.f1 = f1 #这句话的意思就是s1的装备里面加一个新实例化的手雷对 #象(简单来说就是s1装备手雷,第一个只是变量名) s1.f1.update(s1) s1.f1.attack(o1) print(f'{s1.name}攻击了{o1.name}, {o1.name}的生命值是{o1.life_value}') s1.attack(o1) # 使用手榴弹后,攻击值会加成,这时候伤害比原来大 print(f'{s1.name}攻击了{o1.name}, {o1.name}的生命值是{o1.life_value}')