魔法方法 含义
  基本的魔法方法
__new__(cls[, ...])

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

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

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

4.__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() 调用时的行为
__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) 定义加法的行为:+ 
__sud__(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)    (与上方相同,当左操作数不支持相应的操作时被调用)
__rand__(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)   定义赋值按位或操作的行为:|= 
  一元操作符 
__pos__(self) 定义正号的行为:+x 
__neg__(self)  定位负号的行为:-x 
__abs__(self)  定义当被 abs() 调用时的行为 
__invert__(self)  定义按位求反的行为:~x 
  类型转换 
__conplex__(self)  定义当被 complex() 调用时的行为(需要返回恰当的值) 
__int__(self)  定义当被 int() 调用时的行为(需要返回恰当的值) 
__float__(self)  定义当被 float() 调用时的行为(需要返回恰当的值) 
__round__(self)  定义当被 round() 调用时的行为(需要返回恰当的值) 
__index__(self) 

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

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

3.如果__index__被定义,则__int__也需要被定义,且返回相同的值

   上下文管理(with 语句)
__enter__(self) 

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

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

__exit__(self, exc_trpe, exc_value, traceback) 

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

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

  容器类型
__len__(self)  定义当被 len() 调用时的行为(返回容器中元素的合数) 
__getitem__(self, key)  定义获取容器中指定元素的行为,相当于 self[key] 
__setitem__(self, ket, value)  定义设置容器中指定元素的行为,相当于 self[key] =value 
__delitem__(self, key)  定义删除容器中指定元素的行为,相当于 del self[key] 
__iter__(self)  定义当迭代容器中的元素的行为 
__reversed__(self)  定义当被 reversed() 调用时的行为 
__contains__(self, item)  定义当使用成员测试运算符 (in 或 not in)时的行为 

Python魔法方法详解的更多相关文章

  1. Python 魔法方法详解

    据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个, ...

  2. [转载]Python 魔法方法详解

    据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个, ...

  3. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息.        ...

  4. python MethodType方法详解和使用

    python 中MethodType方法详解和使用 废话不多说,直接上代码 #!/usr/bin/python # -*-coding:utf-8-*- from types import Metho ...

  5. Python String 方法详解

    官网文档地址:https://docs.python.org/3/library/stdtypes.html#string-methods 官网 公号:软测小生ruancexiaosheng 文档里的 ...

  6. python魔法方法大全

    1.python魔法方法详解: python魔法方法是可以修改重载的,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而 ...

  7. with上下文管理 python魔法方法

    with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 1. 资源对象的获取与释放. 使用with可以简化try...finally ... 2. 在不修改函数代码的前 ...

  8. Python基础之 urllib模块urlopen()与urlretrieve()的使用方法详解。

    Python urllib模块urlopen()与urlretrieve()的使用方法详解   1.urlopen()方法urllib.urlopen(url[, data[, proxies]]) ...

  9. Python调用C/C++动态链接库的方法详解

    Python调用C/C++动态链接库的方法详解 投稿:shichen2014 这篇文章主要介绍了Python调用C/C++动态链接库的方法,需要的朋友可以参考下 本文以实例讲解了Python调用C/C ...

随机推荐

  1. python学习:注释、获取用户输入、字符串拼接、运算符、表达式

    注释 #为单行注释'''三个单引号(或者"""三个双引号)为多行注释,例如'''被注释的内容''' '''三个单引号还可以起到多行打印的功能. #ctrl+? 选中的多行 ...

  2. HTML5:离线存储

    最近由于找工作一直没时间也没有精力更新博客,找工作真是一件苦逼的事情啊...不抱怨了,我们来看看HTML5的新特性---离线存储吧. 随着Web App的发展,越来越多的移动端App使用HTML5的方 ...

  3. ECMA Script 6_异步编程之 Promise

    Promise 对象 异步编程 方案,已同步的方式表达异步的代码,解决回调地狱的问题 比传统的解决方案——回调函数和事件——更合理和更强大 是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步 ...

  4. 2.7python简历心得(重点)

    2019-2-7 20:07:20 绝地求生被盗了,...因为群邮件木马导致! 正好不要想买显卡啦!又省了好多钱!!! 努力多学技能!并且深入了解,精通自己技能!!!坚持学习!! 要学会拓展自己的技能 ...

  5. [LeetCode] Linked List Components 链表组件

    We are given head, the head node of a linked list containing unique integer values. We are also give ...

  6. CentOS7 安装 jexus-5.8.2-x64

    前要提示: 如果你要安装asp.net 请参考: http://www.cnblogs.com/xiaoruilin/p/7867823.html 背景: CentOS7 Mono (Mono JIT ...

  7. Android 基础知识

    system/app   与   system/priv-app Android4.4系统在system目录下新增了priv-app目录,在该目录下的apk一般都是系统核心应用如Launcher.sy ...

  8. python全栈开发 * css 选择器 浮动 * 180808

    css 选择器 一.基本选择器 1.标签选择器 标签选择器可以选中所有的标签元素,比如div,ul,li ,p等等,不管标签藏的多深,都能选中,选中的是所有的,而不是某一个,所以说 "共性& ...

  9. linux ---docker篇

    Docker docker是什么? docker最初是dotCloud公司创始人Solomom Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并在2 ...

  10. Docker 路径更改

    本文环境在Windows 10 下docker docker 默认不修改路径全部安装在c盘会非常大,等发现c盘占了20多g再想办法...... 默认情况下 1.linux 容器下Docker 容器的安 ...