【python笔记】面向对象--继承

目录

继承的理解

继承的语法

继承的覆写

多重继承


继承的理解

举个例子吧

我是人,这是一只狗。我们是不同的物种,显然我们有不同的特征。

但是呢,我们都属于动物,我们都有动物的特征。

那么假设代码中设置了一个类,用来描述动物的特征(动物类)

我们还设置了两个类

一个是描述人的类(人类)

一个是描述狗的类(狗类)

很显然呢,人跟狗的特征,既有相同的,也有不同的。

那么这个相同的动物特征,我们就无需重复写关于动物特征的代码。

这些关于动物的代码我们可以保存在动物类中,那么我们人类和狗类直接继承动物类的代码就可以调用动物类的方法和属性。

我们称动物类为爸爸类(父类)

人类和狗类为儿子类(子类)

继承的语法

class 父类:

.......

class 子类(父类):

......

细心的小伙伴可能已经发现了,父类后面没有括号,而子类后面有个括号,括号里面写父类。

举例:

class aml:
    def state(self):
        print("我需要吃饭喝水窜稀")
class dog(aml):
    def move(self):
        print("我依靠四肢行走")
class man(aml):
    def move(self):
        print("我依靠两腿行走")
if __name__=="__main__":
    #定义哈士奇
    哈士奇=dog()
    哈士奇.move()
    哈士奇.state()
    #定义帅锅
    帅锅=man()
    帅锅.move()
    帅锅.state()

代码分析:我定义了三个类,aml,dog,man

然后state方法只有aml有,man和dog没定义

但是man和dog是aml的子类。

所以dog和man依然可以使用state的方法

输出结果:

我依靠四肢行走
我需要吃饭喝水窜稀
我依靠两腿行走
我需要吃饭喝水窜稀

继承的覆写

我们也许会遇到一个情况,父类与子类有着相同名称的方法。

当我们父类与子类有相同名字的方法时,我们调用那个名字的方法会调用子类的方法。

这个常用于父类相应方法无法满足子类开发需求,或者是__init__。

class one:
    def __init__(self):
        print("这是one输出的内容")
class two(one):
    def __init__(self):
        print("这是two输出的内容")
if __name__=="__main__":
    a=two()

 可能有人不懂__init__,这个就是类的初始化第一个方法,就是你在输入a=类()时,直接执行的方法。

但是可以看到父子类中,这个方法是一模一样的,所以a=two()的话他会执行two的内容。

这就实现了覆写。

这是two输出的内容

有没有一种方法可以接收父类的内容同时也接收子类的内容呢?

这就不得不说我们的super()函数了

语法:super().方法名()

class one:
    def __init__(self):
        print("这是one输出的内容")
class two(one):
    def __init__(self):
        super().__init__()
        print("这是two输出的内容")
if __name__=="__main__":
    a=two()

 如此一来,父类的相应方法的内容就相当于全写在了子类中,那么,我们的结果就会把父类的也输出。

这是one输出的内容
这是two输出的内容

多重继承

继承不一定只继承一个类的。

一个儿子可以继承好多个爹。

语法:class 子类(父类,父类....):

class one:
    def on(self):
        print("这是one输出的内容")
class two:
    def tw(self):
        print("这是two输出的内容")
class three(one,two):
    def __init__(self):
        super().on()
        super().tw()
        print("这是three输出的内容")
if __name__=="__main__":
    a=three()

结果

这是one输出的内容
这是two输出的内容
这是three输出的内容

你可能感兴趣的:(Python笔记,笔记,python)