据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切。

他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。

Python 的魔术方法非常强大,然而随之而来的则是责任。了解正确的方法去使用非常重要!

魔法方法

含义

基本的魔法方法

__new__(cls[, ...])

new 是在一个对象实例化的时候所调用的第一个方法

它的第一个参数是这个类,其他的参数是用来直接传递给 init 方法

new 决定是否要使用该 init 方法,因为 new 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果 new 没有返回实例对象,则 init 不会被调用

new 主要是用于继承一个不可变的类型比如一个 tuple 或者 string__init__(self[, ...]) 构造器,当一个实例被创建的时候调用的初始化方法

__del__(self) 析构器,当一个实例被销毁的时候调用的方法

__call__(self[, args...]) 允许一个类的实例像函数一样被调用:x(a, b) 调用 x.__call__(a, b)

__len__(self) 定义当被 len() 调用时的行为

__repr__(self) 定义当被 repr() 调用时的行为

__str__(self) 定义当被 str() 调用时的行为 类似于Java中toString方法

__bytes__(self) 定义当被 bytes() 调用时的行为

__hash__(self) 定义当被 hash() 调用时的行为

__bool__(self) 定义当被 bool() 调用时的行为,应该返回 True 或 False

__format__(self, format_spec) 定义当被 format() 调用时的行为

有关属性

__getattr__(self, name) 定义当用户试图获取一个不存在的属性时的行为

__getattribute__(self, name) 定义当该类的属性被访问时的行为

__setattr__(self, name, value) 定义当一个属性被设置时的行为

__delattr__(self, name) 定义当一个属性被删除时的行为

__dir__(self) 定义当 dir() 被调用时的行为

__get__(self, instance, owner) 定义当描述符的值被取得时的行为

__set__(self, instance, value) 定义当描述符的值被改变时的行为

__delete__(self, instance) 定义当描述符的值被删除时的行为

比较操作符

__lt__(self, other) 定义小于号的行为:x < y 调用 x.__lt__(y)

__le__(self, other) 定义小于等于号的行为:x <= y 调用 x.__le__(y)

__eq__(self, other) 定义等于号的行为:x == y 调用 x.__eq__(y)

__ne__(self, other) 定义不等号的行为:x != y 调用 x.__ne__(y)

__gt__(self, other) 定义大于号的行为:x > y 调用 x.__gt__(y)

__ge__(self, other) 定义大于等于号的行为:x >= y 调用 x.__ge__(y)

算数运算符

__add__(self, other) 定义加法的行为:+

__sub__(self, other) 定义减法的行为:-

__mul__(self, other) 定义乘法的行为:*

__truediv__(self, other) 定义真除法的行为:/

__floordiv__(self, other) 定义整数除法的行为://

__mod__(self, other) 定义取模算法的行为:%

__divmod__(self, other) 定义当被 divmod() 调用时的行为

__pow__(self, other[, modulo]) 定义当被 power() 调用或 ** 运算时的行为

__lshift__(self, other) 定义按位左移位的行为:<<

__rshift__(self, other) 定义按位右移位的行为:>>

__and__(self, other) 定义按位与操作的行为:&

__xor__(self, other) 定义按位异或操作的行为:^

__or__(self, other) 定义按位或操作的行为:|

反运算

__radd__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__rsub__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__rmul__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__rtruediv__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__rfloordiv__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__rmod__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__rdivmod__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__rpow__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__rlshift__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__rrshift__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__rxor__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

__ror__(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)

增量赋值运算

__iadd__(self, other) 定义赋值加法的行为:+=

__isub__(self, other) 定义赋值减法的行为:-=

__imul__(self, other) 定义赋值乘法的行为:*=

__itruediv__(self, other) 定义赋值真除法的行为:/=

__ifloordiv__(self, other) 定义赋值整数除法的行为://=

__imod__(self, other) 定义赋值取模算法的行为:%=

__ipow__(self, other[, modulo]) 定义赋值幂运算的行为:**=

__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

类型转换

__complex__(self) 定义当被 complex() 调用时的行为(需要返回恰当的值)

__int__(self) 定义当被 int() 调用时的行为(需要返回恰当的值)

__float__(self) 定义当被 float() 调用时的行为(需要返回恰当的值)

__round__(self[, n]) 定义当被 round() 调用时的行为(需要返回恰当的值)

__index__(self)

当对象是被应用在切片表达式中时,实现整形强制转换

如果你定义了一个可能在切片时用到的定制的数值型,你应该定义 index

如果 index 被定义,则 int 也需要被定义,且返回相同的值

上下文管理(with 语句)

__enter__(self)

1. 定义当使用 with 语句时的初始化行为

2. __enter__ 的返回值被 with 语句的目标或者 as 后的名字绑定

__exit__(self, exc_type, exc_value, traceback)

1. 定义当一个代码块被执行或者终止后上下文管理器应该做什么

2. 一般被用来处理异常,清除工作或者做一些代码块执行完毕之后的日常工作

容器类型

__len__(self) 定义当被 len() 调用时的行为(返回容器中元素的个数)

__getitem__(self, key) 定义获取容器中指定元素的行为,相当于 self[key]

__setitem__(self, key, value) 定义设置容器中指定元素的行为,相当于 self[key] = value

__delitem__(self, key) 定义删除容器中指定元素的行为,相当于 del self[key]

__iter__(self) 定义当迭代容器中的元素的行为

__reversed__(self) 定义当被 reversed() 调用时的行为

__contains__(self, item) 定义当使用成员测试运算符(in 或 not in)时的行为

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对聚米学院的支持。如果你想了解更多相关内容请查看下面相关链接

python contains魔法方法_Python魔法方法详解相关推荐

  1. python菜单怎么做_Python 城市菜单详解(超详解)

    print("--------城市查询系统---------") print("--------按数值进行查询--------") menu={"内蒙 ...

  2. python字典操作的方法_python 字典操作方法详解

    python 字典操作方法详解 一.总结 一句话总结: 字典就是键值对映射 ,像js和php中的键值对数组:{'name':'jamnes','age':'32'} 1.python字典的增删改查? ...

  3. python re模块下载_python re模块详解

    1.正则表达式基础 1.1正则表达式概念 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  4. python集合的操作_Python集合操作方法详解

    集合是无序的,天生不重复的数据组合,它的作用如下: 去重,即:把一个列表变成集合,就去重了 关系测试,即:测试两组集合的交集.并集和差集等 一.集合常用方法总结 二.定义 1.语法 >>& ...

  5. python中递归函数写法_python递归函数用法详解

    上期我们介绍了函数式编程,这期内容就是关于递归的函数内容,本期还是按照老规矩,给大家进行核心整理,内容通俗易懂,搭配实际应用,以供大家理解. 关于递归: 百度解释:是指函数/过程/子程序在运行过程序中 ...

  6. python指定变量类型_Python 变量类型详解

    变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些变量可以存储整 ...

  7. python怎么看内置模块_Python的内置模块详解

    一.什么是模块 模块就是封装了一些列功能的py文件,我们使用的时候直接导入这个文件,通过传入参数的方式使用其他文件的功能函数 二.模块有哪些 内置模块 自定义模块 第三方模块 三.如何导入模块 导入模 ...

  8. python queue get 方法_Python Queue模块详解

    Python3.5中,队列是线程间最常用的交换数据的形式.Queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 创建一个"队列"对象 import ...

  9. python文件输入符_python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)...

    一.变量和表达式 >>> 1 + 1 2 >>> print 'hello world' hello world >>> x = 1 >&g ...

  10. python cmp方法_python cmp函数详解

    cmp( x, y):比较2个对象,前者小于后者返回-1,相等则返回0,大于后者返回1. Python的cmp比较函数比较原理 Python的cmp函数可以比较同类型之间,或者不同数据类型之间.然后根 ...

最新文章

  1. 程序员创业前要做哪些准备?
  2. 服务器操作系统百度文库,Linux操作系统配置服务器的方法及实现_百度文库(6页)-原创力文档...
  3. ccd相机好修吗_「CCD购买指南 」CCD废片大公开
  4. 有一个会泰勒级数的八岁表妹是怎样一种体验?
  5. java语言程序设计教程翁恺第二版课后答案_《JAVA语言程序设计教程(第2版)/翁恺 肖少拥》翁恺,肖少拥著【摘要 书评 在线阅读】-苏宁易购图书...
  6. Dev Express Report 学习总结(五)在分组中使用聚集表达式AggregateExpression
  7. 《scikit-learn》使用交叉验证优化KNN参数
  8. Servlet多线程机制
  9. VNC 远程重装 Linux
  10. nginx Linux 环境下安装
  11. 从普通物理到弦论教材推荐
  12. Hyperscan 5.1.0 安装
  13. 视频流媒体服务器智能云终端如何快速获取直播流地址?
  14. CSGO服务器搭建教程
  15. 微信hook,易语言微信助手功能简单介绍
  16. HTML5-简易Canvas绘图板
  17. python exe文件反编译_[原创]python exe文件解包方法总结
  18. SDUT最短路径问题 1867————最短路
  19. 纽约州推出“被遗忘权”提案 用户或能要求将个人隐私信息从搜索结果中移
  20. 华为云管理网络2.0,志不止于网络

热门文章

  1. 贪心算法——聪明的LJY
  2. Verilog 四层电梯设计
  3. 基于Arduino平台dmp库+匿名四轴上位机测试MPU6050
  4. MVVM 已过时?MVVM 升级版:MVI 架构来了
  5. 如何提高soc算法精度
  6. python2基础难点_第2课Python基础知识,第二课,python,要点
  7. 史上最全的android studio 插件大全整理
  8. 数据挖掘公开数据集【汇总】
  9. SSH: Bad owner or permissions on .ssh/config的解决
  10. sys/class/backlight为空,目录下没东西的原因