广告
返回顶部
首页 > 资讯 > 后端开发 > Python >总结Python常用的魔法方法
  • 958
分享到

总结Python常用的魔法方法

2024-04-02 19:04:59 958人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、算数运算符的魔法方法二、反运算相关的魔法方法三、增量赋值运算四、一元操作符一、算数运算符的魔法方法 python2.2以后,对类和类型进行了统一,做法就是讲int(

一、算数运算符的魔法方法

  • python2.2以后,对类和类型进行了统一,做法就是讲int()、float()、str()、list()、tuple()这些BIF转换为工厂函数(类对象)
  • 给出以下算数运算符对应的魔法方法,前面和后面都被双下划线包尾说明是魔法方法
运算符 对应的魔法方法 中文注释
+ __ add__(self, other) 加法
- __ sub__(self, other) 减法
* __ mul__(self, other) 乘法
/ __ truediv__(self, other) 真除法
// __ floordiv__(self, other) 整数除法
% __ mod__(self, other) 取余除法
divmod(a, b) __ divmod__(self, other) 把除数和余数运算结果结合,divmod(a,b)返回值是一个元组(a//b, a%b)
** __ pow__(self, other[,modulo]) self的other次方再对modulo取余
<< __ lshift__(self, other) 按位左移
>> __ rshift__(self, other) 按位右移
& __ and__(self, other) 按位与操作
^ __ xor__(self, other) 按位异或操作(同为0,异为1)
__ or__(self, other) 按位或操作(有1则1)
  • eg:

>>> type(len)
<class 'builtin_function_or_method'>            #普通的BIF
>>> type(int)
<class 'type'>             #工厂函数(类对象),当调用它们的时候,其实就是创建了一个相应的实例对象
>>> type(dir)
<class 'builtin_function_or_method'>
>>> type(list)
<class 'type'>

>>> a = int('123')        #创建一个相应的实例对象a
>>> b = int('345')
>>> a + b              #Python在两个对象进行相加操作
468
  • eg:举个例子,下面定义一个比较特立独行的类:

继承int,并重写__add__方法


>>> class New_int(int):
    def __add__(self,other):
        return int.__sub__(self,other)
    def __sub__(self,other):
        return int.__add__(self,other)

    
>>> a = New_int(3)
>>> b = New_int(5)
>>> a + b    #两个对象相加,触发 __add__(self,other)方法
-2
>>> a - b
8
>>>

实例2:错误写法,会造成无限递归
>>> class New_int(int):
    def __add__(self,other):
        return (self + other)  
    def __sub__(self,other):
        return (self - other)


>>> class New_int(int):
    def __add__(self,other):
        return (int(self) + int(other))       #将self与other强制转换为整型,所以不会出现两个对象相加触发__add__()方法
    def __sub__(self,other):
        return (int(self) - int(other))

    
>>> a = New_int(3)
>>> b = New_int(5)
>>> a + b
8

二、反运算相关的魔法方法

  • 反运算相关的魔法方法
魔法方法 定义
__ radd__(self, other) 定义加法的行为:+(当左操作数不支持相应的操作时被调用)
__ rsub__(self, other) 定义减法的行为:-(当左操作数不支持相应的操作时被调用)
__ rmul__(self, other) 定义乘法的行为:*(当左操作数不支持相应的操作时被调用)
__ rtruediv__(self, other) 定义真除法的行为:/(当左操作数不支持相应的操作时被调用)
__ rfloordiv__(self, other) 定义整数除法的行为://(当左操作数不支持相应的操作时被调用)
__ rmod__(self, other) 定义取模算法的行为:%(当左操作数不支持相应的操作时被调用)
__ rdivmod__(self, other) 定义当被divmod()调用时的行为(当左操作数不支持相应的操作时被调用)
__ rpow__(self, other) 定义当被power()调用或**运算时的行为(当左操作数不支持相应的操作时被调用)
__ rlshift__(self, other) 定义按位左移位的行为:<<(当左操作数不支持相应的操作时被调用)
__ rrshift__(self, other) 定义按位右移位的行为:>>(当左操作数不支持相应的操作时被调用)
__ rand__(self, other) 定义按位与操作的行为:&(当左操作数不支持相应的操作时被调用)
__ rxor__(self, other) 定义按位异或操作的行为:^(当左操作数不支持相应的操作时被调用)
__ ror__(self, other) 定义按位或操作的行为:丨(当左操作数不支持相应的操作时被调用)

>>> class int(int):
    def __add__(self,other):
        return int.__sub__(self,other)

    
>>> a = int(3)
>>> b = int(2)
>>> a + b
1

反运算与算术运算符的不同之处是,反运算多了一个'r',例如 __add__()的反运算对应为 __radd__()

>>> a + b

这里a是加数,b是被加数,如果a对象的__add__()方法没有实现或者不支持相应的操作,那么python就会自动调用b的__radd__()方法

实例:

>>> class Nint(int):
    def __radd__(self,other):
        return int.__sub__(self,other)

    
>>> a = Nint(5)
>>> b = Nint(3)
>>> a + b      #由于a对象默认有__add__()方法,所以b的__radd__()没有执行
8

实例2:

>>> class Nint(int):
    def __radd__(self,other):
        return int.__sub__(self,other)

    
>>> b = Nint(5)
>>> 3 + b         #由于3无__add__()方法,所以执行b的反运算__radd__(self,other)方法,其中self是b对象
2

eg:注:在重写反运算魔法方法时,一定要注意顺序问题。得到的应该是个负数,所以顺序改变下。

在这里插入图片描述 

三、增量赋值运算

增量赋值运算的魔法方法

魔法方法 定义
__ iadd__(self, other) 定义赋值加法的行为:+=
__ isub__(self, other) 定义赋值减法的行为:-=
__ imul__(self, other) 定义赋值乘法的行为:*=
__ itruediv__(self, other) 定义赋值真除法的行为:/=
__ ifloordiv__(self, other) 定义赋值整数除法的行为://=
__ imod__(self, other) 定义赋值取模算法的行为:%=
__ ipow__(self, other) 定义赋值幂运算的行为:**=
__ ilshift__(self, other) 定义赋值按位左移位的行为:<<=
__ irshift__(self, other) 定义赋值按位右移位的行为:>>=
__ iand__(self, other) 定义赋值按位与操作的行为:&=
__ ixor__(self, other) 定义赋值按位异或操作的行为:^=
__ ior__(self, other) 定义赋值按位或操作的行为:丨=
- -

四、一元操作符

  • 一元操作符的魔法方法
魔法方法 定义
__ neg__(self) 定义正号的行为:+x
__ pos__(self) 定义负号的行为:-x
__ abs__(self) 定义当被abs()调用时的行为
__ invert__(self) 定义按位求反的行为:~x

到此这篇关于总结Python常用的魔法方法的文章就介绍到这了,更多相关Python魔法方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 总结Python常用的魔法方法

本文链接: https://www.lsjlt.com/news/126810.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 总结Python常用的魔法方法
    目录一、算数运算符的魔法方法二、反运算相关的魔法方法三、增量赋值运算四、一元操作符一、算数运算符的魔法方法 python2.2以后,对类和类型进行了统一,做法就是讲int(...
    99+
    2022-11-12
  • PHP中常用的魔术方法总结
    目录构造方法 / __construct析构方法 / __destruct克隆方法 / __clone非静态调用方法 / __call静态调用方法 / __callStatic打印方...
    99+
    2022-11-13
  • PHP中常用的魔术方法(总结分享)
    本篇文章给大家带来了关于PHP的相关知识,PHP把所有”__”开头的方法当做魔术方法,下面主要为大家介绍了PHP中常用的几个魔术方法,文中示例代码讲解详细,需要的可以参考一下。(推荐教程:PHP视频教程)构造方法 / __construct...
    99+
    2022-09-05
  • 详解Python常用的魔法方法
    目录一、python魔法方法二、运算符重载三、打印操作的魔法方法四、属性操作的魔法方法五、描述符六、定制序列七、迭代器一、python魔法方法 Python的魔法方法会在特定的情况下...
    99+
    2022-11-12
  • Python中的魔法函数总结整理
    基本魔法方法 功能 __new__(cls[, ...]) 1. new 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一个参数是这个类,其他的参数是用来直接传递给 init 方法 3. new 决定是否要使用该 i...
    99+
    2023-01-31
    函数 魔法 Python
  • Python Pandas常用函数方法总结
    初衷 NumPy、Pandas、Matplotlib、SciPy 等可以说是最最最常用的 Python 库了。我们在使用 Python 库的时候,通常会遇到两种情况。以 Pandas 举例。 我想对 Pan...
    99+
    2022-06-02
    Pandas常用函数方法 python pandas
  • Python常用的魔法方法是什么
    这篇文章将为大家详细讲解有关Python常用的魔法方法是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、python魔法方法Python的魔法方法会在特定的情况下自动调用,且他们的方法名通常被双下划...
    99+
    2023-06-15
  • 常用的Python魔法方法有哪些
    这期内容当中小编将会给大家带来有关常用的Python魔法方法有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、算数运算符的魔法方法python2.2以后,对类和类型进行了统一,做法就是讲int()、...
    99+
    2023-06-15
  • RedisTemplate常用方法总结
    目录String类型Hash类型 List类型 Set类型 zSet类型 参考: Redis常用的数据类型: String Hash List Se...
    99+
    2022-11-12
  • Python中re模块的常用方法总结
    前言 正则表达式作为计算机科学的一个概念,通常被用来检索、替换那些符合某个规则的文本。正则表达式是对字符串操作的一种逻辑公式,用事先定义好的规则字符串对字符串进行过滤逻辑处理。 re...
    99+
    2022-11-12
  • Python中列表list常用方法总结
    目录1. clear() 移除列表中的所有元素2. copy() 返回列表的一个副本3.count() 统计某个元素在列表中出现的次数4. extend() 在列表的末尾一次性追加另...
    99+
    2023-05-19
    Python列表常用方法 Python列表方法 Python列表 Python list
  • python常用的魔法方法(双下划线)
    目录前言魔法方法__init__方法__new__方法__call__方法__str___方法__del___方法__enter__ & __exit__方法item系列方法...
    99+
    2022-11-12
  • Oracle常用的SQL方法总结
       在项目中一般需要对一些数据进行处理,以下提供一些基本的SQL语句:     1.基于条件的插入和修改:需要在表中插入一条记录,插入前根据key标识判断...
    99+
    2022-10-18
  • 数组常用方法总结
    数组常用方法总结 一.获取数组长度1.1 使用length 二.数组转字符串2.1 Arrays是什么2.2 使用toString() 三. 数组拷贝3.1 使用 copyOf()3.2 copyOfRange() 四....
    99+
    2023-08-30
    java 排序算法 开发语言
  • Python异常及处理方法总结
    调试Python程序时,经常会报出一些异常,异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需要根据异常Traceback到出错点,进行分析改正;另一方面,有些异常是不可避免的,但我们可以对异常进行捕获处理,防止程序终...
    99+
    2023-01-31
    异常 方法 Python
  • 常见的Python异常及处理方法总结
    目录一、错误与异常1.什么是错误2.什么是异常3.回溯信息二、常见异常常见异常类三.异常处理1.异常处理2.简单的异常处理格式3.执行顺序4.except分支可以有多个5.执行顺序6...
    99+
    2022-11-12
  • Python安装第三方库常用方法总结
    本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于安装第三方库的常用方法,下面一起来看一下,希望对大家有帮助。【相关推荐:Python3视频教程 】在pyhton的学习中,相信大家通常都会碰到第三方库的安装问题,这个问题对于...
    99+
    2023-05-14
    python
  • Python随机值生成的常用方法总结
    目录一、随机整数二、随机浮点数三、随机字符串四、随机数使用到的一些算法一、随机整数 1.包含上下限:[a, b] import random #1、随机整数:包含上下限:[a, b]...
    99+
    2022-11-11
  • Python学习之字典的常用方法总结
    目录字典添加与修改方法利用[]处理字典的内置函数update字典的内置函数setdefault关于字典的注意事项再强调尝试做一个小练习获取字典的key与value字典中的values...
    99+
    2022-11-13
  • Python学习之集合的常用方法总结
    目录什么是集合?集合与列表的区别集合的创建方法集合的增删改add函数update函数remove函数clear函数del方法删除集合关于集合的重要说明获取两个集合交、并、差集的函数d...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作