继承

派生

在继承过程中,

父类中没有的属性在子类中出现,就叫做派生属性

父类中没有的方法,子类中出现,叫做派生方法。

只要在子类的对象调用方法,子类中有的名字 一定调用子类中的,子类中没有就往父类中找,还没有去object中去找。还没有就报错。

若是子类和父类都有相同的名字的方法,一定是调用子类里面的。若是想要父类的,就需要单独调用父类的方法。

如果既想在调用子类是又需要调用父类的方法,我们可以在调用子类方法在再调用父类。

class Animal:
    '''
    人和狗都是动物,所以创造一个Animal基类
    '''
    def __init__(self, name, aggressivity, life_value):
        self.name = name  # 人和狗都有自己的昵称;
        self.aggressivity = aggressivity  # 人和狗都有自己的攻击力;
        self.life_value = life_value  # 人和狗都有自己的生命值;

    def eat(self):
        print('%s is eating'%self.name)

class Dog(Animal):
    '''
    狗类,继承Animal类
    '''
    def bite(self, people):
        '''
        派生:狗有咬人的技能
        :param people:  
        '''
        people.life_value -= self.aggressivity

class Person(Animal):
    '''
    人类,继承Animal
    '''
    def attack(self, dog):
        '''
        派生:人有攻击的技能
        :param dog: 
        '''
        dog.life_value -= self.aggressivity

egg = Person('egon',10,1000)
ha2 = Dog('二愣子',50,1000)
print(ha2.life_value)
print(egg.attack(ha2))
print(ha2.life_value)
View Code

注意:像ha2.life_value之类的属性引用,会先从实例中找life_value然后去类中找,然后再去父类中找...直到最顶级的父类。

super

在python3中,子类执行父类的方法也可以直接用super方法

class A:
    def hahaha(self):
        print('A')

class B(A):
    def hahaha(self):
        super().hahaha()
        #super(B,self).hahaha()
        #A.hahaha(self)
        print('B')

a = A()
b = B()
b.hahaha()
super(B,b).hahaha()
View Code

super只在新式类中有,python3中所有的类都是新式类。

super在类的内部是使用时,可以不用传入参数,使用子类接收到的参数就可以。但在外面调用时就需要传入参数(先类在对象|先父类在子类)。

原文地址:https://www.cnblogs.com/zly9527/p/11575300.html