如何做到逻辑性强,可复用性高呢?
-
第一阶段是函数式编程
依据高内聚,低耦合的思想,把部分逻辑代码封装到函数里边,可以在不同的地方去调用
-
第二阶段是面向对象编程
面向对象的程序设计的核心是对象(上帝式思维),面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。
了解一些名词:类、对象、实例、实例化
类:具有相同特征的一类事物 (人、狗、老虎)
对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)
实例化:类——>对象的过程
在程序中把变量表示特征,把函数表示技能, 具有相同特征和技能的一类事物就是 ‘类’, 而对象就是这一类事物中具体的一个。
面向对象三要素, 封装、继承、多态。
封装就是事物抽象为类,把对外接口暴露,将实现和内部数据隐藏。
继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。
多态是指一类事物有多种形态, 多态性是指在不考虑实例类型的情况下使用实例。
以王者荣耀中的角色去举例
首先我们创建一个父类,把一些属性和方法封装进去
class Role: speed = 10 # 走路速度 health = 100 # 生命值 def run(self): # 走的方法 pass def attack(self): # 攻击的方法 pass def skill1(self): # 技能1 pass def skill2(self): # 技能2 pass def skill3(self): # 技能3 pass def skill4(self): # 技能4 pass def is_dead(self): # 判断是否死亡 if self.health <= 0: return True return False
然后我们创建几个角色类别的类 去继承父类
class Warrior(Role): category = '战士' health = 1000 class Shooter(Role): category = '射手' health = 500 class Master(Role): category = '法师' health = 500
然后我们创建具体角色的类 去继承类别的类
class YaSe(Warrior): name = '亚瑟' def skill1(self): pass def skill2(self): pass def skill3(self): pass def skill4(self): pass class Liyuanfang(Shooter): name = '李元芳' def skill1(self): pass def skill2(self): pass def skill3(self): pass def skill4(self): pass
比如你这把选了英雄
player = Yase() # 选了亚瑟 # 或者 player = Liyuanfang() # 选了李元芳
当控制角色走的时候, 调用
player.run()
当要放技能时, 调用
player.skill1() player.skill2() player.skill3() player.skill4()
通过is_dead方法去判断角色是否死了
player.is_dead()
我们在游戏控制器中封装一个统一的接口,不关心是哪个角色,只调用角色的run方法
def run(obj): obj.run()
比如有一个亚瑟和李元芳的实例
yase = Yase() liyuanfang = Liyuanfang()
那么在调用他们各自的run方法时,直接调用接口, 无需考虑其他东西, 这叫多态性
run(yase) run(liyuanfang)