【第十二课】 面向对象(下)

本文深入探讨Python中的super()方法,解释其如何调用父类方法。同时,介绍了封装、继承和重写的概念,包括单继承和多继承的工作原理。文中通过实例展示了多继承时方法调用的规则,如左优先原则和同一级最后类的执行。此外,还阐述了多态的基本思想,即定义时和运行时类型的不一致性。整个讨论旨在帮助读者更好地理解和应用面向对象编程的关键概念。
摘要由CSDN通过智能技术生成


前言

上一篇文章主要是针对一个类的介绍,这一章我们来了解针对多个类的介绍


super() 方法

定义

用来调用父类的方法

特点

以下为个人观点

  • super() 方法只能往上寻找(往前面寻找父类)
  • super() 只能调用方法,不能调用属性
    调用方法 : super().方法名()

封装

封装是面向对象的三大特征之一。简单来说,封装就是把代码定义在类的内部。这方面我的知识比较薄弱,不再一一介绍。

继承

重写父类

如果我继承了父类,那么是不是只可以使用父类的方法呢?

不是的,我们不仅可以继承父类的方法,还能自己定义自己的方法。也可以覆盖父类的方法。

若是自定义方法的话,只要不与父类的方法重名即可。
若自定义方法与父类方法重名了,则为重写父类方法。

  • 重写父类方法
    • 只调用自己的方法

    实例化对象后,使用对象调用自己的方法

    • 既调用自己的,还调用父类的
      • super() 调用
      • 父类名.方法名(self) 调用
class Father(object):
    def show(self):
        print('父类的show方法')


class Son(Father):
    def show(self): # 子类的方法名与父类的方法名重名
        print('子类的show方法')
        Father.show(self) # 父类名.方法名(self) 调用
        super().show() # super() 调用


s = Son()
s.show()

# 输出结果:
子类的show方法
父类的show方法
父类的show方法

单继承

继承:继承一个父类,继承之后。子类可以调用父类的方法和属性

继承方法 : 直接在子类名的括号中填写父类的类名。父类不需要带括号

class Father(object):
    pass


class Son(Father):
    pass
class Father(object):
    def show(self):
        print('父类的show方法')


class Son(Father):
    pass


s = Son() # 实例化子类
s.show() # 子类调用父类的show() 方法

# 输出结果:
父类的show方法

object 是所有类的父类。当不继承任何类时。默认继承基类

多继承

多继承:同时继承多个父类。调用方法同时,但是要在括号内传入多个参数

不论是单继承还是多继承。父类的私有属性和方法都不会被子类继承

如果继承了多个父类,那么调用方法会不会有冲突呢?

情况一:

GrandFather
Father
Son
Father1

当Son子类继承了两个父类时,而其中一个父类还存在一个父类。那么这种情况,则遵循以下的规则

class Son(Father, Father1)

  • 左边优先原则 (优先调用左边的父类的方法,这里的左边是指左边的参数)
  • 一路走到底 (若 Father 类中没有所需要的方法,则继续往上寻找。在 GrandFather 类中寻找所需要的方法。如果都没有,最后去 Father1 类中寻找)

如上图,若 Son 类 调用父类方法。则优先寻找 Father 父类中的方法。再寻找 GrandFather 类中的方法。最后寻找 Father1 中的方法

情况二:

GrandFather
Father
Father1
Son

当出现继承的两个父类,而这两个父类又同时继承同一个父类。则遵循以下的规则

  • 同一个父类时,需要找到同一级的最后一个类(执行找到的最后一个类)。再往上一层寻找

class Son(Father, Father1)

如上图,若两个父类同时存在同一种方法。则执行 Father1 中的方法

多态

多态 : 定义时的类型与运行时的类型不一致(不严谨)

# 定义第一个类
class No_One(object):
    def show(self):
        print('No_One的show方法')

# 定义第二个类
class No_Two(object):
    def show(self):
        print('No_Two的show方法')


def test(obj):
    obj.show()


one = No_One() # 实例化No_One类
test(one) # 将实例化对象 one 传入test() 方法中,对象再在方法中调用函数

two = No_Two() # 实例化No_Two类
test(two) # 将实例化对象 two 传入test() 方法中,对象再在方法中调用函数

# 输出结果:
No_One的show方法
No_Two的show方法

总结

在这里插入图片描述




注意: 以上思维导图为个人编写,如有错误。还希望各位大佬批评指正。整篇文章全为个人观点,表述不当之处,还请多多谅解。欢迎各位大佬评论交流!

面向对象中的两个概念很重要,一个是类(抽象),另一个就是对象(具像)。类代表的范围更广,类里面可以包含多个函数(也称作方法)。而对象就是用来调用类里面的方法和属性的。



欢迎各位大佬评论交流。同时也欢迎各位大佬批评指正。让我们一起共同进步!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值