# 面向对象的三大特性 封装、继承、多态 # 一、封装 # 面向对象的封装其实就是使用构造方法将内容封装到对象中,然后通过对象直接或者self间接获取被封装的内容。 # 游戏角色任务划分 ''' 1、创建三个游戏人物,分别是: 苍井井,女,18,初始战斗力1000 东尼木木,男,20,初始战斗力1800 波多多,女,19,初始战斗力2500 2、游戏场景,分别: 草丛战斗,消耗200战斗力 自我修炼,增长100战斗力 多人游戏,消耗500战斗力 ''' # 1、##################### 定义实现功能的类 ##################### class Person: '''初始化实例属性''' def __init__(self, na, gen, age, fig): self.name = na self.gender = gen self.age = age self.fight =fig def grassland(self): """注释:草丛战斗,消耗200战斗力""" self.fight = self.fight - 200 def practice(self): """注释:自我修炼,增长100战斗力""" self.fight = self.fight + 200 def incest(self): """注释:多人游戏,消耗500战斗力""" self.fight = self.fight - 500 def detail(self): """注释:当前对象的详细情况""" temp = "姓名:%s ; 性别:%s ; 年龄:%s ; 战斗力:%s" % (self.name, self.gender, self.age, self.fight) print(temp) # 2、##################### 开始游戏(实例化类:即根据类创建对象) ##################### cang = Person('苍井井', '女', 18, 1000) # 创建苍井井角色 dong = Person('东尼木木', '男', 20, 1800) # 创建东尼木木角色 bo = Person('波多多', '女', 19, 2500) # 创建波多多角色 # 3、##################### 调用实例化对象方法 ##################### cang.incest() # 苍井空参加一次多人游戏 dong.practice() # 东尼木木自我修炼了一次 bo.grassland() # 波多多参加一次草丛战斗 # 4、##################### 输出当前所有人的详细情况 ##################### cang.detail() dong.detail() bo.detail() # 5、##################### 再一次调用 ##################### cang.incest() #苍井空又参加一次多人游戏 dong.incest() #东尼木木也参加了一个多人游戏 bo.practice() #波多多自我修炼了一次 # 6、##################### 输出当前所有人的详细情况 ##################### cang.detail() dong.detail() bo.detail() # 二、继承 # 继承即子继承父类的内容 # 多继承 按照 深度优先和广度优先 # 多继承分为经典类和新式类 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类 # 面向对象的继承其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。 class Animal: # 经典类 def eat(self): print("%s 吃 " % self.name) def drink(self): print("%s 喝 " % self.name) def shit(self): print("%s 拉 " % self.name) def pee(self): print("%s 撒 " % self.name) class Cat(Animal): def __init__(self, name): self.name = name self.breed = '猫' def cry(self): print('%s 喵喵叫' % self.breed) class Dog(Animal): def __init__(self, name): self.name = name self.breed = '狗' def cry(self): print('%s 汪汪叫' % self.breed) # ######### 执行 ######### c1 = Cat('小白家的小黑猫') c1.eat() c1.cry() d1 = Dog('胖子家的小瘦狗') d1.drink() d1.cry() # 新式类 class Animal(object): # 经典类 def eat(self): print("%s 吃 " % self.name) def drink(self): print("%s 喝 " % self.name) def shit(self): print("%s 拉 " % self.name) def pee(self): print("%s 撒 " % self.name) class Cat(Animal): def __init__(self, name): self.name = name self.breed = '猫' def cry(self): print('%s 喵喵叫' % self.breed) class Dog(Animal): def __init__(self, name): self.name = name self.breed = '狗' def cry(self): print('%s 汪汪叫' % self.breed) class Cat_Dog(Cat, Dog): def cry(self): Dog.pee(self) print('喵喵叫&汪汪叫') # ######### 执行 ######### a1 = Cat_Dog('毒刘家的不猫不狗') a1.eat() a1.cry() # 三、多态(鸭子类型) class F1: pass class S1(F1): def show(self): print('S1.show') class S2(F1): def show(self): print('S2.show') def Func(obj): print(obj.show()) s1_obj = S1() Func(s1_obj) s2_obj = S2() Func(s2_obj)