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:类的实例化对象调用父类的方法。

 

posted @ 2019-07-02 17:25  梁劲雄  阅读(153)  评论(0编辑  收藏  举报