Python学习笔记【week03day3】继承,多继承,多态,函数重写,运算符重载

本文围绕Python面向对象编程展开,介绍了继承概念,指出子类可使用父类非私有属性和方法;阐述多继承时子类构造函数调用规则;说明多态依赖继承,Python因动态类型无真正多态;还讲解函数重写和运算符重载,如重写__str__函数改变对象打印信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承,多继承,多态,函数重写,运算符重载

继承

概念:

  • 如果两个或者两个以上的类具有相同的属性和方法,我们可以抽取出来一个类,将共同的部分声明到被抽取的类中。这个被抽取出来的类我们称之为父类/超类/基类
  • 其他类我们称之为子类/派生类
  • 父类与子类之间的关系我们称之为继承。
  • object类是一切类的基类。

特点:

  • 子类可以直接使用父类未私有化的属性以及方法,但是父类不能使用子类特有的属性以及方法。
  • 若子类拥有特殊的属性的时候,我们需要在子类重写__init__方法,在子类的init方法中,我们需要将子类拥有的所有的属性都声明(包括父类中的),还需要手动调用父类中的init方法super().init(参数列表)
  • 当子类中不存在特殊的属性【我们没有重写init方法的时候】,这时候系统会自动调用父类中的init的方法,不需要我们自己手动调用。
  • 父类私有化的属性与方法,我们不能直接访问,但是我们可以通过暴露出的接口进行访问。

多继承

  • 当一个子类有多个父类的时候我们称之为多继承。

  • 使用多继承的时候,当两个父类中的属性不相同的时候,默认调用写在继承列表里面最前面的位置的父类的构造函数。

  • 若两个父类中的构造函数我们都想调用的情况下,这时候我们需要自己手动来进行调用。
    在这里插入图片描述

  • 当多个父类中出现相同的方法名的时候,子类优先选择写在继承列表前面的那个。

多态

  • 多态本质上指一类事物的多种表现形态,它是依赖继承而存在。

  • 在python中不存在真正的多态,因为python是一个动态数据类型的语言。

  • 鸭子模型:如果有一只鸟,走路像鸭子,叫声像鸭子,那么我们就称这只鸟叫鸭子。我们不关心它的数据类型,我们只关系它的使用。

  • isinstance(obj,type)
    功能:判断某个对象是否属于某种类型。
    当这个对象属于这种类型或者属于这种类型的子类,那么返回True,否则返回False。

  • dir(obj)
    功能:查看指定对象的所有的属性以及方法,以列表的方式返回。

函数重写

以重写系统__str__函数和__str__函数为例子:
未改写前,使用print(obj)打印自定义对象,打印出来的是地址
在这里插入图片描述
重写__str__函数后:
在这里插入图片描述

  • 当我们打印对象的时候,默认情况下显示的地址,当我们不想让其显示地址的时候我们可以重写系统中__str__函数,当执行print()或者str()函数的时候会自动调用此方法。因此__str__函数的返回值就是我们打印的对象的信息。

  • 当一个类中重写了__repr__函数,而没有重写__str__函数的时候,我们可以使用__str__ = repr
    在这里插入图片描述

  • 两者的区别:
    引用网友的例子:
    在这里插入图片描述

  • 两者的区别仅限于在终端下直接调用的显示不同,但使用print时,两者没有区别。

  • 个人体会:实战中的重写,很少会去改写系统函数,主要是子类重写父类的函数。

运算符重载

  • 实际上就是重写系统运算符方法,以__add__为例子
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值