zoukankan      html  css  js  c++  java
  • 继承

    派生

    在继承过程中,

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

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

    只要在子类的对象调用方法,子类中有的名字 一定调用子类中的,子类中没有就往父类中找,还没有去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在类的内部是使用时,可以不用传入参数,使用子类接收到的参数就可以。但在外面调用时就需要传入参数(先类在对象|先父类在子类)。

  • 相关阅读:
    初识函数
    文件操作
    set集合,深浅拷⻉以及部分知识点补充
    is和==的区别以及编码、解码
    python数据类型三(字典)
    python数据类型二(列表和元组)
    python数据类型一(重点是字符串的各种操作)
    python基础二
    python基础一
    【1】 肿瘤医学研究前言进展
  • 原文地址:https://www.cnblogs.com/zly9527/p/11575300.html
Copyright © 2011-2022 走看看