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

  • 相关阅读:
    Linux命令:sed -i 解析、sed是什么、工作原理、基本语法使用、数字和正则定址、基本子命令以及最常用子命令 s 的用法
    【转】putty里面的连接key文件(ppk文件)转换为xshell里面使用的key文件
    【转】Go 中如何优雅关闭子进程?
    [转]golang 获取本机真实IP
    【转】prometheus数据写入TDengine
    怎么查看redhat的版本
    【转】YML是什么
    [转]为什么要进行URL编码
    [转]Ubuntu 上 Yarn 安装
    【转】docker -v 和Dockerfile 中VOLUME 区别
  • 原文地址:https://www.cnblogs.com/zly9527/p/11575300.html
Copyright © 2011-2022 走看看