类( 封装、继承、多态)

# 面向对象的三大特性   封装、继承、多态


# 一、封装

# 面向对象的封装其实就是使用构造方法将内容封装到对象中,然后通过对象直接或者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)

猜你喜欢

转载自blog.csdn.net/luzaofa/article/details/79788486
今日推荐