魔法方法 含义
  基本的魔法方法
__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. JSMDN常用函数总结

    /* 2018/08/25 更新日志:增加 六:条件操作符判断 2018/09/04 更新日志:增加 六.5.三元运算,六.1.注意下 ,七.eval函数使用示例*/一.数组Array常用方法1. 使 ...

  2. Dreamweaver编辑区下方的属性栏显示

    显示属性栏 不小心关闭了Dreamweaver的属性栏,突然用到之后不知道怎么显示,此时需要两步:选择[窗口]工具栏,选择[属性]选项. 此时又可以看到编辑区下方的属性栏了,而且出于编写代码的需要可以 ...

  3. GMA Round 1

    学弟说我好久没更blog了. 因为自己最近其实没干什么. 所以来搬运一下GMA Round 1 的比赛内容吧,blog访问量.网站流量一举两得. 链接:https://enceladus.cf/con ...

  4. file_get_contents 在本地测试可以, 但在服务器上报错403

    解决方法: Most likely if you don't get any content while accessing an webpage, probably it doesn't want ...

  5. postgresql----JOIN之多表查询

    JOIN用于多张表的关联查询,如SELECT子句(SELECT A.a,A.b,B.a,B.d)中既有表A的字段,同时还有B表的字段,此时使用单独使用FROM A或FROM B已经解决不了问题了,使用 ...

  6. 剑指offer——python【第60题】把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行.#类似于二维列表[[1,2],[4,5]] 解题思路 其实这倒题和其他类似的题有所区别,这里是分层打印,把每层的节点值放在同一 ...

  7. python语法_str_eval

    dict1 = {} a = str(dict1) type(a) = 字符串 b = eval(a) type(b) = 字典

  8. css学习_css补充知识

    1.渐进增强,优雅降级 2.浏览器前缀 3.背景渐变   4.css  验证工具 2种方式:第2种支持验证本地的css(推荐) 5.css压缩  ----(节约空间,节省带宽) 6.旋转轮播图 案例: ...

  9. Java中“==”和“equals()”的区别

    “==”比较的是变量所指向的对象,当S1在内存中定义以后,再定义s2的时候s2所指向的值是定义s1时候所创建的,而不是又在内存创建了一个“Monday”. “equals”比较的是对象所指向的值,所以 ...

  10. LeetCode 34 - 在排序数组中查找元素的第一个和最后一个位置 - [二分][lower_bound和upper_bound]

    给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...