首页 > 编程语言 >python 特殊方法

python 特殊方法

时间:2023-02-13 17:24:37浏览次数:47  
标签:__ 特殊 python 运算符 实例 方法 对应 ###

## 跟运算符无关的特殊方法

### 1. 实例的创建和销毁
__init__
解释:构造方法,可调用超类的构造器。这是实例级别的方法,发生在实例创建之后,用于初始化实例,给实例添加一些属性和操作
__new__
解释:优先于__init__被调用。这是类级别的方法,控制类生成实例的过程,然后通常返回该类的一个实例
__del__
解释:用于销毁实例化对象,释放内存空间。注:通常情况下,python的垃圾回收机制(引用计数)会自动销毁没用的实例
### 2. 字符串/字节序列表示形式
__repr__
解释:把对象用字符串的形式表达出来,默认返回值为:“类名 + object at 内存地址”,可自定义为我们想要的信息
__str__
解释:与__repr__类似,不同的地方在于:__str__是在用str()或者用print()打印一个对象时被调用,并且返回的字符串对终端用户更友好
__format__
解释:当字符串/字节序列对象调用format()时被调用
__bytes__
解释:讲对象转换成二进制字节串,对应python内置函数bytes()
### 3. 数值转换
__abs__
解释:对应python内置函数abs(),计算绝对值
__bool__
解释:对应python内置函数bool(),判断值的真假。如果实例不存在__bool__方法,bool(object)将尝试调用实例的__len__方法,如果返回0,bool将返回False,否则返回True
__complex__
解释:对应python内置函数complex(),用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数
__int__
解释:对应python内置函数int(),用于将数字或字符串转换为整数。
__float__
解释:对应python内置函数float(),用于将数字或字符串转换成浮点数。
__hash__
解释:对应python内置函数hash(),用于获取一个对象的哈希值。
__index__
解释:对应python内置函数index(),用于从列表中找出某个值第一个匹配项的索引位置。
### 4. 集合模拟
__len__
解释:对应python内置函数len(),返回对象(字符、列表、元组等)长度或项目个数。注意:如果len(object)中的object是python的内置类型,那么Cpython会抄个近路,在调用__len__方法时,实际上会直接返回PyVarObject里面的ob_size属性,这里的PyVarObject是表示内存中长度可变的内置对象的C语言结构体,直接读取这个值的速度比调用一个方法快得多
__getitem__
解释:如果在类中定义了这个__getitem__方法,那么这个类的实例就可以通过"实例[key]"进行取值,比如:[1,2,3][0],{‘a’:1, ‘b’:2}[‘a’]
__setitem__
解释:如果在类中定义了这个__setitem__方法,那么这个类的实例就可以通过"实例[key]=某值"进行赋值,比如:[1,2,3][0] = 6,{‘a’:1, ‘b’:2}[‘a’] = 3
__delitem__
解释:如果在类中定义了这个__delitem__方法,那么这个类的实例就可以通过"del 实例[key]"进行删除值,比如:del [1,2,3][0],del {‘a’:1, ‘b’:2}[‘a’]
__contains__
解释:如果在类中定义了这个__contains__方法,那么就可以通过python的"in"运算符来判断对应的值是否存在于类实例中
### 5. 迭代枚举
__iter__
解释:对应python内置函数iter(),用来生成迭代器,可以通过for循环调用next()方法
__reversed__
解释:对应python内置函数reversed(),用来生成反向迭代器,可以通过for循环调用next()方法
__next__
解释:对应python内置函数next(),返回迭代器的下一个项目,迭代器中必然包含__next__方法,迭代器调用for循环将自动调用next()
### 6. 可调用模拟
__call__
解释:如果在类中定义了这个__call__方法,那么将使得类实例对象可以像调用普通函数那样,以"对象名()"的形式使用。
### 7. 上下文管理
__enter__和__exit__
解释:实现了上下文管理协议的上下文管理器中,必然包含了__enter__和__exit__这两个方法,比如:with语句,with语句开始运行时,调用__enter__方法,with语句运行结束时,调用__exit__方法
### 8. 属性管理
__getattr__
解释:对应python内置函数getattr(),用于返回一个对象属性值。当访问一个对象中不存在的属性时,会抛出异常,提示不存在这个属性。而这个异常就是__getattr__方法抛出的。我们可以自定义该方法
__getattribute__
解释:该方法可以拦截对对象属性的所有访问企图,当属性被访问时,自动调用该方法(只适用于新式类)。因此常用于实现一些访问某属性时执行一段代码的特性。注意:直接通过类访问类属性不会调用该方法
__setattr__
解释:对应python内置函数setattr(),在对一个实例对象的属性设置值的时候,会调用到这个方法,每个设置值的方式都会进入该方法。
__delattr__
解释:对应python内置函数delattr(),用于删除实例对象的属性
__dir__
解释:对应python内置函数dir(),用于获取某个实例对象拥有的所有的属性名和方法名
### 9. 属性描述符
__get__、__set__和__delete__
解释:定义三个方法中的任意一个,这个对象就会被认为是一个描述符,并且可以在被作为对象属性时重载默认的行为。如果一个对象定义了__get__()和 __set__(),它被认为是一个数据描述符,只定义__get__()被认为是非数据描述符
### 10. 跟类相关的业务
__prepare__
解释:该方法只在元类中有用,而且必须声明为类方法,解释器调用元类的__new__之前会先调用__prepare__,使用类定义体中的属性创建映射。该方法第一个参数是元类,随后两个参数分别是要构建的类的名称和基类组成的元组,返回值必须是映射。元类构建新类的时候,该方法的返回映射会传给__new__的最后一个参数,然后在传给__init__方法
__instancecheck__
解释:对应python内置函数isinstance(),检测一个实例对象是否属于某个类的实例。注意:这个方法一定要定义在元类当中才有意义
__subclasscheck__
解释:对应python内置函数issubclass(),判断一个类是不是另一个类的子类。注意:这个方法一定要定义在元类当中才有意义
## 跟运算符相关的特殊方法

### 1. 一元运算符
__neg__
对应运算符:-(负号)
__pos__
对应运算符:+(正号)
__abs__
对应运算符:abs() (绝对值)
### 2. 算数运算符
__add__
对应运算符:+(加号)
__sub__
对应运算符:-(减号)
__mul__
对应运算符:*(乘号)
__truediv__
对应运算符:/(除号)
__floordiv__
对应运算符://(地板除、整除)
__mod__
对应运算符:%(求余)
__divmod__
对应运算符:divmod()
__pow__
对应运算符:**或pow()
__round__
对应运算符:round()
### 3. 比较远算符
__lt__
对应运算符:<
__le__
对应运算符:<=
__eq__
对应运算符:==
__ne__
对应运算符:!=
__gt__
对应运算符:>
__ge__
对应运算符:>=
### 4. 反向算术运算符
__radd__
对应运算符:反向+
__rsub__
对应运算符:反向-
__rmul__
对应运算符:反向*
__rtruediv__
对应运算符:反向/
__rfloordiv__
对应运算符:反向//
__rmod__
对应运算符:反向%
__rdivmod__
对应运算符:反向divmod()
__rpow__
对应运算符:反向**或pow()
### 5. 增量赋值算数运算符
__iadd__
对应运算符:+=
__isub__
对应运算符:-=
__imul__
对应运算符:*=
__itruediv__
对应运算符:/=
__ifloordiv__
对应运算符://=
__imod__
对应运算符:%=
__ipow__
对应运算符:**=
### 6. 位运算符
__invert__
对应运算符:~
__lshift__
对应运算符:<<
__rshift__
对应运算符:>>
__and__
对应运算符:&
__or__
对应运算符:|
__xor__
对应运算符:^
### 7. 反向位运算符
__rlshift__
对应运算符:反向<<
__rrshift__
对应运算符:反向>>
__rand__
对应运算符:反向&
__ror__
对应运算符:反向|
__rxor__
对应运算符:反向^
### 8. 增量赋值位运算符
__ilshift__
对应运算符:<<=
__irshift__
对应运算符:>>=
__iand__
对应运算符:&=
__ior__
对应运算符:|=
__ixor__
对应运算符:^=

标签:__,特殊,python,运算符,实例,方法,对应,###
From: https://www.cnblogs.com/mrsphere/p/17117026.html

相关文章

  • Python中如何求1-100的奇数和?方法详解!
    在之前的文章中,老男孩IT教育小编为大家介绍过Python的特点、优势、用途以及薪资待遇等知识,而为了帮助大家更好的掌握Python,小编将为大家讲解一些实战案例,比如:Python中如......
  • 并行执行异步方法的最佳实践
    前言最近写了三篇关于并行异步的博客,因为我走了很多弯路。并行执行异步方法并接收返回值这个问题,stackoverflow上讨论好几年,.NET6实现了Parallel.ForeachAsync。https:/......
  • 【Oculus Interaction SDK】(八)特殊的 UI(曲面效果 & 手指点击)
    前言这篇文章是【OculusInteractionSDK】系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言。如果文章的内容已经不适用于新版本了,也可以......
  • 方法引用
    packagemdthob;publicclassbidaxffa{publicstaticvoidmain(String[]args){intmax=max(20,20);System.out.println(max);}publicsta......
  • 转载:python subprocess.Popen系列问题
    pythonsubprocess.Popen系列问题_水军总督的博客-CSDN博客_pythonsubprocess.popen返回的pid跟ps看到的不一样 python中subprocess.Popen总结_唐僧洗头用飘柔dp的......
  • 动态代理 概述 增强方法
    增强对象的功能设计模式:一些通用的解决固定问题的方式1装饰模式2代码模式概念:1真是对象被代理的对象2代理对象......
  • OpenCV-Python扩充数据集
    在深度学习中,数据集规模直接影响模型训练后的性能。当我们数据集较少的时候可以通过不同的手段对现有的数据进行扩充。比如裁切,翻转,旋转,加入噪点,调整亮度等手段进行数据集......
  • python常用的搜索字符内容函数详解:re.findall/findfiter
    区别findall返回listfinditer返回一个MatchObject类型的iterator详细举例介绍1、findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返......
  • python操作百度网盘
    1、首先需要你去百度网盘开放平台申请一个控制台权限2、开通后新建应用  3、应用新建完之后你会得到:   这是我的代码:start_web.pyclassIndexHandler(tor......
  • 抽象类和抽象方法
    java中的抽象类与抽象方法​​1、设计理念​​​​2、抽象方法​​​​3、抽象类​​​​3.1抽象类与普通类的区别​​​​3.2抽象类案例​​1、设计理念  父类要体现所......