python中的运算符重载与模块

Python运算符重载,代码秒变高大上! 运算符重载是面向对象编程中的一项重要特性,它允许程序员为自定义的数据类型(如类)重新定义标准运算符的行为。这意味着,对于加号+、减号-等运算符,我们可以在不同类型的对象间赋予其特定的操作意义,而不局限于基本数据类型的操作。例如,在自定义的复数类中,我们可以重载+运算符,使其能够实现复数的加法操作。 阅读详情

在自定数据格式,需要进行算术、逻辑运算时,可以使用运算符重载,即可像原有的数据一样使用数学符号表达式。python中的运算符重载是通过重载特殊的系统方法来实现的,文档中称为special methods,函数本身一般一双下划线开头和结尾。

加法示例

自定义一个类似复数的数据格式,在没有重载__add__的情况下

#!/usr/bin/python
class MyDemoClass:
    def __init__(self,inputI,inputQ):
        self.Ivalue = inputI
        self.Qvalue = inputQ
        pass
    def __del__(self):
        pass

if __name__ == '__main__':
    a = MyDemoClass(10,20)
    b = MyDemoClass(20,30)
    c = a + b
    print(c.Ivalue)
    print(c.Qvalue)
    pass

运行脚本得到的结果

Traceback (most recent call last):
File "test.py", line 21, in <module>
c = a + b
TypeError: unsupported operand type(s) for +: 'MyDemoClass' and 'MyDemoClass'

重载__add__函数之后

#!/usr/bin/python
class MyDemoClass:
    def __init__(self,inputI,inputQ):
        self.Ivalue = inputI
        self.Qvalue = inputQ
        pass

    def __del__(self):
        pass

    def __add__(self,another):
        tmpIvalue = self.Ivalue + another.Ivalue
        tmpQvalue = self.Qvalue + another.Qvalue
        return MyDemoClass(tmpIvalue,tmpQvalue)
        pass

if __name__ == '__main__':
    a = MyDemoClass(10,20)
    b = MyDemoClass(20,30)
    c = a + b
    print(c.Ivalue)
    print(c.Qvalue)
    pass

再次运行得到的结果:

30
50

关于__add__ __iadd__ __radd__的用法

__add__重载的是加法运算,表示的是 c = a + b;__iadd__重载的是+=运算,表示 a += b;__radd__表示c=a+b情况下,如果a类型没有定义相应的加法运算,即没有重载__add__函数,则如果类型b中定义了__radd_,则使用b中重载的__radd__函数进行加法运算。

运算符及重载函数对应关系

算术运算: 加法 + __add__;减法 - __sub__;乘法 * __mul__;除法 /与//,其中/对应 __truediv__,//对应 __floordiv__,差别例如在于整数相除时,得到浮点数还是取整数;指数运算 ** __pow__;求余数 % __mod__;绝对值 abs __abs__; a @ b 矩阵matmult __matmult__;正号 +a形式 __pos__;负号 -a __neg__;

按位运算: 左移位 << __lshift__; 右移位 >> __rshift__; 按位与 & __and__;按位或 | __or__;按位异或 ^ __xor__;非 ~ __invert__;

逻辑比较: 小于 < __lt__; 小于等于 <= __le__; 等于 == __eq__; 不等 != __ne__;大于 > __gt__;大于等于 >= __ge__;not __not__; is not is_not; in contians __contains__;

其它: __str__格式string格式,用于print打印;

参考文档

https://docs.python.org/3/library/operator.html#module-operator

https://www.programiz.com/python-programming/operator-overloading

https://docs.python.org/3/reference/datamodel.html#special-method-names

https://infohost.nmt.edu/tcc/help/pubs/python/web/special-methods.html

https://infohost.nmt.edu/tcc/help/pubs/python/web/index.html

https://docs.python.org/3/reference/index.html

https://docs.python.org/3/genindex-_.html

模块及其使用

python的模块划分类似于传统意义上的文件包含,每个python的文件都可以作为一个模块,使用方法例如存在一个文件a.py,在其它文件中可以通过import a或from a import *等方式引入使用。

package/包定义方式

python中的package包是包含多个模块/包的文件夹,包文件夹的定义结构如下

package/ __init__.py file.py file2.py file3.py subpackage/ __init__.py submodule1.py submodule2.py

定义包类文件夹时,每个文件夹下必须包含以__init__.py命名的特殊文件,文件的内容可以为空,包可以采用和模块相同的import方式来使用。

__init__.py文件的作用

__init__.py主要用于指示文件夹为python的包,可以在其中进行一些配置,方便使用。

可以通过在__init__.py中修改__all__ = ["module1","module2"]的方式来定义包导出的模块。当定义了__all__时,使用from subpackage import *的方式导入module1、module2。

可以在__init__.py 通过from module import name的方式来简化使用,在未定义时,需要采用from package.module import name的方式,而修改__init__.py后可以直接使用from package import name的形式。

参考文档

python package http://mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html

Python 正确重写运算符(重载) 运算符重载的作用是让用户定义的对象使用中缀运算符(如+和|)和一元运算符(如-和~)。在Python中,这些也算是运算符:函数调用:()属性访问:.元素访问和切片:[] 阅读详情

相关推荐

python基础知识—os模块—递归—类(对象,构造和析构函数)—(对象与类)属性—运算符重载

python基础知识—os模块—递归—类(对象,构造和析构函数—对象与类属性—运算符重载os模块递归递归遍历目录深度遍历广度遍历python类类的实例化对象访问对象属性和方法对象的初始状态(构造函数)析构函数重写__repr__与 __str__限制访问变量对象属性和类属性对象与类,属性动态给实例添加属性和方法运算符重载 os模块 os:包含了普遍操作系统的功能: import os #获取操作系统类型 nt--windows posix--Linux,Unix或Mac OS X print(os.na

xiaofengfeng20的博客 406

Python——运算符重载

Python——运算符重载1.加法运算符重载和减法运算符重载2.`__str__()`方法重载和`__ge__()`方法重载3.索引的切片重载 运算符重载指的是将运算符与类方法关联起来,每个运算符对应一个指定的内置方法。 Python通过重写一些内置方法,实现了运算符的重载功能。 1.加法运算符重载和减法运算符重载 加法运算符重载——__add__()方法 减法运算符重载——__sub__()方法 例 7-16 加法运算符重载和减法运算符重载的实现: #ex0716.py 加法运算符重载和减法运算符重

XQC_KKK的博客 9400

7、Python使用外部库

在本教程中,您将了解 Python 中的Imports,获得一些使用不熟悉的库(以及它们返回的对象)的技巧,并深入研究运算符重载。

AI算法蒋同学的博客 1983

Python编程:正确重载运算符

Python经典进阶教程!

weixin_56051592的博客 3036

python模块:命名空间与重载模块

#module2.py print('starting to load...') import sys name=42 def func():pass class klass:pass print('done loading.') &amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;gt; import module2 starting t...

及时总结 663

54、深入理解Python类:继承、模块与运算符重载

本文深入探讨了Python中类的特性,包括通过继承进行定制、类作为模块属性的存在形式、运算符重载的机制与应用等核心概念。文章还介绍了如何创建简单的类并动态添加属性和方法,同时分析了类与实例的关系以及面向对象编程的本质。通过示例代码和详细解释,帮助读者全面理解Python类的设计与使用技巧。

bean的博客 136

Python-运算符重载(Operator Overloading)

运算符重载是Python中一种强大的特性,通过在类中定义特殊方法,可以使自定义类的对象支持各种运算符操作。这不仅使代码更加直观和简洁,还能提高代码的可读性和可维护性。通过上述示例,我们可以看到如何为复数类和向量类重载各种运算符,希望这些内容能帮助学生更好地理解和掌握运算符重载的概念和应用。

xycxycooo的博客 2030

Python运算符重载

Python运算符用于内置类。但是相同的运算符对不同的类型有不同的行为。例如,+运算符将对两个数字执行算术加法、合并两个列表并连接两个字符串。Python中的这一功能允许同一运算符根据上下文具有不同的含义,称为运算符重载。那么,当将它们与用户定义类的对象一起使用时会发生什么呢?示例 :下面的类,它试图在二维坐标系中模拟一个点。复制self.x = xself.y = y1.2.3.4.现在,运行代码并尝试在Python shell中添加两个点。复制1.2.3.

wjianwei666的专栏 125

python 运算符重载_Python 炫技操作:模块重载的五种方法

点击上方“Python编程时光”,选择“加为星标”第一时间关注Python技术干货!明哥原创的200页《PyCharm 中文指南》 震撼发布系列文章Python 炫技操作(01):条件语句的七种写法Python 炫技操作(02):合并字典的七种方法Python 炫技操作(03):连接列表的八种方法Python 炫技操作(04):海象运算符的三种方法Python 炫技操作(05):花式导包...

weixin_39834406的博客 199

2、Python编程基础:对象、类与模块的深入解析

本文深入讲解了Python编程的基础知识,涵盖对象的创建与引用、类与方法的实现、运算符重载、模块的导入方式以及Python代码的结构规范。通过示例代码和详细的解析,帮助读者理解面向对象编程的核心概念,并提供实践建议和常见问题解答,以提升编程能力。

g8f9d0s1a2的博客 38

特性阻抗 – SI/PI 世界碰撞的地方

除了谐振零点和峰值外,在一定频率下,传输线的阻抗看起来像远端开路时的电容器的阻抗,也看起来像远端短路时电感的阻抗。如果随后的制造变化将测得的阻抗推到 -10% 容差的低端(例如 44 欧姆)的测量区域内,那么如果在初始下降时测量,则真正的特性阻抗将在 42 欧姆时降低 5%,并且超出规格。这意味着,当我们测量红色或蓝色图的峰和相邻谷之间的中间阻抗时,它是该频率下传输线的特性阻抗。图 7 远端开路时(红色常亮)与远端短路时(蓝色常亮)的电感和电容抗阻抗与频率的关系(上图)和传输线的阻抗与频率(下图)的对比。

jkh920184196的博客 962

python中小于号的重载,Python 运算符重载

类和模块的第三个主要差别:运算符重载。简而言之,运算符重载就是让用类写成的对象,可截获并响应用在内置类型上的运算:加法、切片、打印和点号运算等。这只是自动分发机制:表达式和其他内置运算流程要经过类的实现来控制。这里也和模块没有什么相似之处:模块可以实现函数调用,而不是表达式的行为。重载运算符主要概念的概要以双下划线命名的方法(__X__)是特殊钩子。Python运算符重载的实现是提供特殊命名的方法...

weixin_36028920的博客 1121

超详细 | 贝叶斯网络基础——有图有真相

Hello,大家好,我是starz。这是本系列的第二篇《概率基础Ⅱ》,虽说是概率基础,但作为过渡,它开始以图为载体 这节的主要内容有: 贝叶斯网络 三种结构 D-划分 贝叶斯球 马尔科夫毯 应用例子 总结 让我们开始吧 :3 贝叶斯网络 概率图模型可笼统分为两类,一是基于无向图的马尔科夫网络: 二是基于有向图的贝叶斯...

qq_41603411的博客 2万+

PYthon面向对象(2)属性的外部添加和运算符重载

(1)属性的外部添加 添加之前可以先限制添加内容,可以避免胡乱添加属性 接着添加符合要求的属性 如果要把方法从外部添加,需要导入types模块 然后就可以添加了 结果为 (2) 运算符重载 根据自己的喜好设置重载方法 Python新版本不再支持很多老方法了,所以建议先导入operator模块再操作 ...

qq_53310688的博客 519

别再傻傻分不清了!STM32定时器里Prescaler和ClockDivision到底有啥区别?

本文深入解析STM32定时器中Prescaler和ClockDivision的区别与应用场景。Prescaler作为定时器的'心跳调节器',决定计数频率;而ClockDivision则是输入捕获的'抗噪滤镜',有效抑制高频噪声。通过实战案例和示波器实测数据,帮助开发者避免常见配置误区,提升嵌入式系统稳定性。

weixin_29193259的博客 319

STK相关总结

STK简介 一.SIM卡应用工具包(SIM Application Toolkit),又名CAT/USAT,它包含一系列终端与SIM卡的交互指令,SIM卡可以应用卡内的小应用程序和终端交互,从而实现增值服务的目的,STK包括三种类,STK-imsi切换,STK –OTA,STK-BIP 功能: (1) Profile download:配置下载,开机初始化SIM卡过程中,终端告诉SIM卡终端支持哪些功能,STK中download指终端将数据发送给SIM卡 (2) Proactive command: 主动式

jingjing_2的博客 3356

VII Python(5)基础知识(模块、包、异常)

VII Python(5)基础知识(模块、包、异常)运算符重载:运算符重载是指在方法中拦截内置的操作(python解释器内部实现的操作,如__add__、__contains__、__delitem__、__eq__、__ge__等等这些都是运算符),当类的实现出现在内置操作中,python会自动调用自定义的方法,并且返回自定义方法的操作结果;运算符重载让类拦截常规的pyt...

weixin_34353714的博客 199

【模型解读】【代码复现】Segment Anything Model(SAM)

Meta AI的一个新的人工智能模型,只需一次点击就能 "分割出 "任何图像中的任何物体! SAM是一个可提示的分割系统,对不熟悉的物体和图像具有zero-shot的概括性,并且不需要额外的训练。

lalula的博客 2万+

python模块和类_python类和模块区别,python命名空间

在python中,类可以提供模块级别之下的命名空间。如果一个模块写很多函数,某些函数之间共同完成一组功能,用类会看起来更清晰,在调用时候也会更好,对于ide补全有更小范围的限定提示。类提供 继承 组合 多重实例 通过继承进行定制 运算符重载(就是类的双下划线方法__del__ __call__ __str__ __iter__ ........)。类和模块都可以建立命名空间树,模块中的功能叫函...

weixin_39583162的博客 113

FOC高频注入量产级C语言实现方案

高频注入技术是无传感器FOC实现零速和低速控制的关键方法,解决了传统反电动势观测器在低速失效的问题。该技术通过向电机注入高频电压信号,利用永磁同步电机凸极性特性,从高频电流响应中解调出转子位置信息。文章详细介绍了三种主流高频注入方法(旋转电压注入、脉振电压注入和脉振电流注入)的原理及实现流程,重点分析了脉振电压注入的信号处理步骤和位置观测器设计。同时提供了完整的C语言实现代码,包括硬件抽象层、核心算法模块(坐标变换、电流环、SVPWM等)和系统集成方案,并给出量产优化建议和安全保护机制。这套方案适用于要求高

汽车软件开发 793

【ComfyUI专栏】安装Triton组件

Triton是一款支持大模型推理的深度学习加速组件,最初仅支持Linux平台,现已通过开源社区适配Windows系统。针对SageAttention的安装,建议使用3.2.0Post10版本(该版本提供封装好的安装包,更高版本仅有源码)。用户可通过GitHub获取安装资源,或直接使用pip命令"pip install triton-windows"进行安装。安装时需注意:1)在虚拟环境中操作;2)使用管理员权限。相关资源链接已在文中提供。

技术与管理的平衡木- 1861

Python实现动态类添加方法、运算符的重载和类方法的重写

本文主要用代码实例加概念的方式呈现! 一、封装 选择小汽车和客车为对象,使用类实现它们的属性和方法(汽车的重量属性,驾驶的方法),并打印属性 1、封装的概念 在程序设计中,封装(Encapsulation)是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其含义是其他程序无法调用。 要了解封装,离不开“私有化”,就是将类或者是函数中的某些属性限制在某个区域之内,外部无法调用。 2、代码实例 代码模块: class Vehicle(): #构...

weixin_55712138的博客 795

假期搞定!2026国社科申报AI全攻略指南:从选题到创新,7大核心要点手把手教你!

最后给大家推荐的400多所高校教师都在用的AI平台——高级学术版专业应用平台,集成了国际主流学术应用,以及ChatGPT、Claude、Gemini、Grok等Al大模型的高级版本平台,还有,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。你的任务是:用高度凝练的方式说明在(某一明确国家战略 / 政策方向,如:中国式现代化、共同富裕、基层治理现代化、数字中国、文化强国、国家安全等)背景下,我究竟要研究一个什么“具体而可操作的问题”。

智能AI让学术科研更容易 624

Kaggle翻译,第七天:Python 7/7

Kaggle翻译终于来啦,鸽了这么长时间,当然是要给大家带来更多的干货啦,希望大家能够喜欢。如有什么错误,还请各位大佬多多指出,小弟一定及时更改!

weixin_45941960的博客 609

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python类和模块区别,python命名空间

https://www.cnblogs.com/ydf0509/p/7988696.html 在python中,类可以提供模块级别之下的命名空间。 如果一个模块写很多函数,某些函数之间共同完成一组功能,用类会看起来更清晰,在调用时候也会更好,对于ide补全有更小范围的限定提示。 类提供 继承 组合 多重实例 通过继承进行定制 运算符重载(就是类的双下划线方法__del__ __call__...

happylzs2008的专栏 167

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

利用boost.python 扩展python

前两天,写了一个利用boost.python封装C++函数供Python调用。今天,需要学习boost.python封装C++的类,供Python使用。因此,又是查了一堆资料。 讲的比较简洁http://blog.sina.com.cn/s/blog_71cc5f2101018jkp.html boost官方文档http://write.blog.youkuaiyun.com/postedit?ref=t

Sunshine_in_Moon的专栏 4935

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 在python和matlab之间使用sqlite文件传输数据
下一篇: selenium中的Select模块以及firefox下载设置
究理观心
博客等级 码龄10年 184粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值