Python编程基础18:运算符重载

举报
howard2005 发表于 2022/01/26 22:31:11 2022/01/26
【摘要】 文章目录 零、本讲学习目标一、运算符重载概述二、加法运算重载符(一)概述(二)案例演示( 三)课堂练习 三、索引与切片重载(一)__getitem__方法1、概述2、方法代码3、案例演示 ...

零、本讲学习目标

  1. 掌握运算符重载的用法
  2. 会定制对象字符串的形式

一、运算符重载概述

  • 运算符重载是通过实现特定的方法使类的实例对象支持Python的各种内置操作 。例如:+运算符是类里提供的__add__这个函数,当调用+实现加法运算的时候,实际上是调用了__add__方法。
方法 说明 何时调用方法
__add__ 加法运算 对象加法:x+y,x+=y
__sub__ 减法运算 对象减法:x-y,x-=y
__mul__ 乘法运算 对象乘法:xy,x=y
__div__ 除法运算 对象除法:x/y,x/=y
__getitem__ 索引,分片 x[i]、x[i:j]、没有__iter__的for循环等
__setitem__ 索引赋值 x[i]=值、x[i:j]=序列对象
__delitem__ 索引和分片删除 del x[i]、del x[i:j]

二、加法运算重载符

(一)概述

  • 加法运算是通过调用__add__方法完成重载的,当两个实例对象执行加法运算时,自动调用__add__方法。
    在这里插入图片描述

(二)案例演示

  • 编写程序 - 演示加法运算符重载.py
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述
  • 如果两个数组长度不相等,那么就会抛出异常
    在这里插入图片描述

( 三)课堂练习

  • 修改案例里的Array类,实现减法、乘法和除法运算重载

三、索引与切片重载

  • 跟索引相关的重载方法有三个:__getitem____setitem____delitem__

(一)__getitem__方法

1、概述

  • 在对实例对象执行索引、切片或者for迭代操作时,会自动调用__getitem__方法。

2、方法代码

# 定义索引、分片运算符重载方法
def __getitem__(self, index):
	return self.data[index]

3、案例演示

  • 编写程序 - 演示索引切片重载.py
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述

(二)__setitem__方法

1、概述

  • 通过赋值语句给索引或者分片赋值时,调用__ setitem __方法实现对序列对象的修改。

2、方法代码

def __setitem__(self, index, value):
        self.data[index] = value

3、案例演示

  • 编写程序 - 演示索引切片赋值重载.py
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述

(三)__delitem__方法

1、概述

  • 当调用del方法时,实质上会调用__delitem__方法实现删除操作。

2、方法代码

def __delitem__(self, index):
	del self.data[index]

3、案例演示

  • 编写程序 - 演示索引切片删除重载.py
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述

四、重载类实例字符串表示

(一)__str__方法重载

1、概述

  • __str__方法,会 return一个字符串,当调用print函数,传入一个类的实例,这个类里面定义了__str__方法,此时就会调用该函数,给出类实例的字符串表示。

2、重载案例演示

  • 编写程序 - 演示__str__重载.py
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述
  • 说明:因为Student类只重载了__str__方法,没有重载__repr__方法,所以print(student)与print(str(student))一样的效果,调用__str__方法显示对象的字符串内容,但是print(repr(student))就无法调用__str__方法,只是显示对象的内存地址。

(二)__repr__方法重载

1、概述

  • __repr__方法,会 return一个字符串,当调用print函数,传入一个类实例,这个类里面定义了__repr__方法,此时就会调用该函数,给出类实例的字符串表示。

2、重载案例演示

  • 编写程序 - 演示__repr__重载.py
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述
  • 说明:因为Student类只重载了__repr__方法,没有重载__str__方法,所以print(student)、print(str(student))与print(repr(student))一样的效果,调用__repr__方法显示对象的字符串内容。

(三)__str__方法与__repr__方法同时重载

1、概述

  • 如果一个类同时重载了__str__和__repr__方法,那么print(实例)和print(str(实例))都是调用__str__方法显示对象的字符串内容,print(repr(实例))调用__repr__方法显示对象的字符串内容。

2、重载案例演示

  • 编写程序 - 演示__str__与__repr__同时重载.py
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述

文章来源: howard2005.blog.csdn.net,作者:howard2005,版权归原作者所有,如需转载,请联系作者。

原文链接:howard2005.blog.csdn.net/article/details/122693878

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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