• day14-单继承


    #面向对象的三大特征:继承、多态、封装。
    #一、单继承:
    # 1.
    class Animal: #没有父类,默认继承了顶级父类object类。
        def __init__(self,name,aggr,hp):
            self.name = name
            self.aggr = aggr
            self.hp = hp
    
    class Person(Animal): #子类继承父类的属性和方法。
        pass
    
    class Dog(Animal): #当Person和Dog具有相同的属性的时候,可以通过继承父类来简化代码。
        pass
    
    p = Person('alex',10,9)
    print(p.name)
    d = Dog('jin',8,7)
    print(d.name)
    
    #2.派生属性和派生方法:在继承父类的属性或方法的基础上,增加新功能:
    class Animal:
        def __init__(self,name,aggr,hp):
            self.name = name
            self.aggr = aggr
            self.hp = hp
    
        def attack(self):
            print('调用攻击技能')
    
    class Person(Animal):
        def __init__(self,name,aggr,hp,money): #子类想派生属性,需要把初始化方法和参数重写一遍,并且添加新参数。
            Animal.__init__(self,name,aggr,hp) #调用父类的属性。
            self.money = money  #派生属性
    
        def attack(self,dog):
            Animal.attack(self)  #调用父类的方法。
            print('%s掉血'%dog) #派生方法
    
    alex = Person('alex',10,9,200)
    print(alex.name)
    print(alex.money)
    alex.attack('jin')
    
    #3.当子类和父类的方法名一样的情况下,执行子类的方法:
    class Animal:
        def __init__(self,name,aggr,hp):
            self.name = name
            self.aggr = aggr
            self.hp = hp
        def attack(self):
            print('调用攻击技能')
    
    class Person(Animal):
        def attack(self): #子类和父类的方法名一样。
            print('执行子类的方法')
    
    alex = Person('alex',100,80)
    alex.attack()  #结果:执行子类的方法
    
    #4. super:
    class Animal:
        def __init__(self,name,aggr,hp):
            self.name = name
            self.aggr = aggr
            self.hp = hp
        def attack(self):
            print('调用父类的攻击技能')
    
    class Person(Animal):
        def __init__(self,name,aggr,hp,money):
            super().__init__(name,aggr,hp) #父类也叫超类,super()调用父类,相当于super(Person,self),所以__init__后面不需要self。
            self.money = money
        def attack(self,a):
            super().attack()
            print('战斗力提高百分之{}'.format(a))
    
    alex = Person('alex',100,80,800)
    print(alex.name)
    alex.attack(80)
    
    super(Person,alex).attack() #结果:调用父类的攻击技能。在类的外面也可以使用super:类的实例化对象调用父类的方法。
  • 相关阅读:
    你不知道的空格
    导致你的微服务走向失败的11个原因
    阿里巴巴正式开源 Inclavare Containers 技术
    如何分辨区块链传销项目?
    编写干净的 React Components & JSX
    面试:3年工作经验程序员应有的技能
    数据库设计规范化的 5 个要求
    mac下镜像飞速安装Homebrew教程
    对优秀程序员的思考
    程序员理想中的工作环境
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/11121945.html
Copyright © 2020-2023  润新知