Python的继承详解

举报
努力变强的小C 发表于 2022/09/28 21:54:31 2022/09/28
【摘要】 Python的继承详解

目录


继承的初识

继承的规则

小结



继承的初识

继承概念:继承是类与类的一种关系,是一种子类与父类的关系,即爸爸与儿子,爸爸生个儿子,儿子继承爸爸的属性和方法。

总的来说,编写类不一定要从空白开始,我们也可以利用一个现成的版本,就是可以使用继承当一个类,如果继承另一个类的时候,就会自动把所有的属性和方法复制过来也就叫父类,这个新形成类,直接会把父类的所有属性方法同时继承,还可以定义属于自己的属性和方法

下面我们举一个例子

class Animal:
    def __init__(self,name,aggr,hp):
        self.name = name
        self.aggr = aggr
        self.hp = hp

class Dog(Animal):
    def bite(self,person):
        person.hp -= self.aggr


class Person(Animal):
    pass

wc = Dog('旺财',100,500)
print(wc.name)


继承的规则

继承的规则是,如果子类没有的属性和方法,就会去找父类,如果父类再没有的话,就会去找object类,因为所有类都是默认继承object类,如果还找不到的话,程序就会报错,但是如果子类和父类同时拥有一个相同的方法,那么子类就不会再去找父类,而是会从自己的方法中寻找使用自己的方法,这个是继承的一大很重要的特性 

下面就再来举一个例子

class Animal:
    def __init__(self,name,aggr,hp):
        self.name = name
        self.aggr = aggr
        self.hp = hp
    def eat(self):
        print(f'{self.name}已经吃药回血')
        self.hp += 100

class Dog(Animal):
    def __init__(self,name,aggr,hp,kind):
        Animal.__init__(self,name,aggr,hp)
        self.kind = kind    #派生属性

    def eat(self):  #如果既想实现新的功能也想使用父类原本的功能,还需要在子类中再调用父类
        Animal.eat(self)
        self.teeth = 2

    def bite(self,person):  #派生方法
     person.hp -= self.aggr

class Person(Animal):
    def __init__(self,name,aggr,hp,kind):
        Animal.__init__(self,name,aggr,hp)
        self.kind = kind    #派生属性

jin = Dog('旺财',100,500,'泰迪')
print(jin.name)

alex = Person('alex',1,2,None)
alex.eat()
print(alex.hp)

jin.bite(alex)
print(alex.hp)


继承的两大种类

在Python中继承有两大种类,一种是单继承,一种是多继承,单继承顾名思义就是只有一个父亲,也就是一个父类,而多继承就是可以继承一个或多个父类的属性和方法,注意,如果多个父类中有同名的属性和方法,就会不能使用第1个父类的属性和方法,这时我们就会使用到广度优先深度优先的原则,多个父类不重名的属性和方法就不会有这种影响,在Python中强调和合理的继承,可以使代码的效率更加的提高,减少代码的重用性 


小结

     父类中没有的属性 在子类中出现  叫做派生属性
    父类中没有的方法 在子类中出现  叫做派生方法
    只要是子类的对象调用, 子类中有的名字 一定是用子类的 ,子类中没有的才找父类
    如果父类中也没有就会报错
    如果父类 子类都有 则用子类的
    如果还想用父类的 则需要单独调用父类的,需要自己传self参数

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。