Python的运算符重载详解
作者:一只萤火虫 发布时间:2022-08-19 21:51:52
标签:Python,运算符,重载
一、前言
运算符重载:为运算符定义方法
所谓重载,就是赋予新的含义同一个运算符可以有不同的功能
二、重载作用
让自定义的实例像内建对象一样进行运算符操作让程序简介易读对自定义对象将运算符赋予新的规则 运算符和特殊方法 运算符重载
# @function:运算符重载
# @Description: 一只萤火虫
class MyInteger:
"""
创建一个自定义的整数类型
"""
def __init__(self, data=0):
# 1.如果传入的参数时是整数类型,那么直接赋值
# 2.如果传入的不是整数类型,则判断能够转化成整数,不能转换就赋初值为0
if isinstance(data, int):
self.data = data
elif isinstance(data, str) and data.isdecimal():
self.data = int(data)
else:
self.data = 0
def __add__(self, other):
if isinstance(other, MyInteger):
# 返回当前对象的副本
return MyInteger(self.data + other.data) # 相加的是MyInteger类型
elif isinstance(other, int):
return MyInteger(self.data + other) # 相加的是整型
def __radd__(self, other):
return self.__add__(other)
def __eq__(self, other):
if isinstance(other, MyInteger):
return self.data == other.data
elif isinstance(other, int):
return self.data == other
else:
return False
def __str__(self):
"""
在打印、str(对象)时被自动调用
:return: 用来返回对象的可读字符串形式(适合普通用户阅读)
"""
return str(self.data)
def __repr__(self):
""" 用来将对象转换成供解释器读取的形式,用来阅读对象的底层继承关系及内存地址"""
return "[自定义整数类型的值]:{}\t地址:{}".format(self.data, id(self.data))
def __sub__(self, other):
return MyInteger(self.data - other.data)
def __del__(self):
print("当前对象:" + str(self.data) + "被销毁") # 程序运行完之后自动被销毁
if __name__ == '__main__':
num1 = MyInteger(123)
num2 = MyInteger(321)
num3 = num1 + num2 # 等价于:num3 = num1.__add__(num2)
print("num3 =", num3)
num4 = MyInteger("123")
num5 = num4 + 124 # 在自定义对象的右侧相加整数类型
num6 = 124 + num4 # 在自定义对象的左侧相加整数类型
print("num5 = ", num5, "\t num6 = ", num6)
num7 = MyInteger(1024)
num8 = MyInteger(1024)
print("num7 == num8 :", num7 == num8)
三、自定义列表
# @function:自定义列表
# @Description:一只萤火虫
class MyList:
def __init__(self, data=None):
self.data = None
if data is None:
self.data = []
else:
self.data = data
def __getitem__(self, index):
# 让本类的对象支持下标访问
if isinstance(index, int):
return self.data[index]
elif type(index) is slice: # 如果参数是切片类型 [10:30:2]
print("切片的起始值:", index.start)
print("切片的结束值:", index.stop)
print("切片的步长:", index.stop)
return self.data[index]
def __setitem__(self, key, value):
self.data[key] = value
def __contains__(self, item):
print("判断传入的", item, "是否在列表元素中")
return self.data.__contains__(item)
def __str__(self):
return str(self.data)
def pop(self, index=-1):
# 默认删除并返回最后一个元素
return self.data.pop(index)
def __delitem__(self, key):
del self.data[key]
def append(self, item):
self.data.append(item)
if __name__ == '__main__':
my_list1 = MyList([item for item in range(10)])
my_list1[1] = 1111
print("显示列表:", my_list1)
print("列表的切片:", my_list1[2:8:2])
print("删除并返回最后一个元素:", my_list1.pop())
del my_list1[1]
print("删除指定下标的元素:", my_list1)
输出结果:
显示列表: [0, 1111, 2, 3, 4, 5, 6, 7, 8, 9]
切片的起始值: 2
切片的结束值: 8
切片的步长: 8
列表的切片: [2, 4, 6]
删除并返回最后一个元素: 9
删除指定下标的元素: [0, 2, 3, 4, 5, 6, 7, 8]
来源:https://blog.csdn.net/weixin_46161549/article/details/116566024


猜你喜欢
- demo实现脚本下载安装工具需要python3,apktool.jar,apktool1.用apktool进行反编译cmd = 'a
- 本文实例讲述了Python框架Flask的基本数据库操作方法。分享给大家供大家参考,具体如下:数据库操作在web开发中扮演着一个很重要的角色
- Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型的转为utf-8的解决办法相信小伙伴们遇
- 在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数。 2. 使用Function对象来进行返
- 本文实例为大家分享了Golang实现文件传输的具体代码,供大家参考,具体内容如下借助TCP完成文件的传输,基本思路如下:1、发送方(客户端)
- 前言看了网上许多关于Windows 本地安装mysql的很多教程,基本上大同小异。但是安装软件有时就可能因为一个细节安装失败。我也是综合了很
- 在上一篇文章中,我们介绍了如何使用源码对TensorBoard进行编译教程,没有定制需求的可以直接使用pip进行安装。TensorBoard
- np.zeros()和np.ones()函数由于小阿奇在写代码的时候会碰到一些不清楚的函数和使用方法,所以我决定把自己碰到的问题和解决办法写
- 本文介绍Python3使用PyMySQL连接数据库,并实现简单的增删改查。什么是PyMySQL?PyMySQL是Python3.x版本中用于
- NumPy's main object is the homogeneous multidimensional array. It
- 开发一个相机应用,需要申请三个权限:相机、读文件、写文件。1、在AndroidManifest.xml中添加<uses-permiss
- 一、MySQL自带的压力测试工具——Mysqlslapmysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使
- 1. 介绍灰度切割:增强特定范围的对比度,突出图像 * 定范围的亮度(灰度级分层也叫灰度切割)实现灰度切割的方法有很多种,但基本的方法就两种,
- 在WEB2.0这个词未出现之前,是没有所谓的WEB1.0之说的,那时候的互联网也是没有时代之分的,能上的网站不多,值得上的网站更不多,很多的
- 介绍:pyenv-virtualenv是pyenv的一个插件,作用如同virtualenv一样,是用来管理虚拟环境的,配合pyenv主体使用
- 我就废话不多说了,大家还是直接看代码吧~//isSymbol表示有无符号func BytesToInt(b []byte, isSymbol
- 为什么选择Python进行数据分析?Python是一门动态的、面向对象的脚本语言,同时也是一门简约,通俗易懂的编程语言。Python入门简单
- 在新建数据库或附加数据库后,想添加关系表,结果出现下面的错误: 此数据库没有有效所有者,因此无法安装数据库关系图支持对象。若要继续,请首先使
- 正文方法一:直接使用已知的cookie访问特点:简单,但需要先在浏览器登录原理:简单地说,cookie保存在发起请求的客户端中,服务器利用c
- 作为酷爱编程的老程序员,实在按耐不下这个冲动,Python真的是太火了,不断撩拨我的心。我是对Python存有戒备之心的,想当年我基于Dru