# 面向对象的三大特性 封装、继承、多态
# 一、封装
# 面向对象的封装其实就是使用构造方法将内容封装到对象中,然后通过对象直接或者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)
class father(object):
def __init__(self, name):
self.name = name
def talk(self): # 父类中的方法
print("father is talking....", self.name)
class son(father):
def __init__(self, name, age):
# super(son, self).__init__(name)
father.__init__(self, name)
self.age = age
def walk(self): # 在子类中定义其自身的方法
print("son is walking....", self.age)
Son = son('luzaofa', 22)
Son.talk()
Son.walk()