zoukankan      html  css  js  c++  java
  • 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:类的实例化对象调用父类的方法。
  • 相关阅读:
    抽丝剥茧设计模式- 责任链模式应用场景
    抽丝剥茧设计模式-工厂和抽象工厂模式
    抽丝剥茧设计模式-你真的懂单例模式吗?
    抽丝剥茧设计模式- 啰嗦几句
    生产环境ng配置
    Linux命令
    内容过滤报错
    user 报错
    cxlabel 显示不全的解决方法
    关于SQL事务的一些坑
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/11121945.html
Copyright © 2011-2022 走看看