魔法方法 含义
  基本的魔法方法
__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. css 制作菜单

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  2. __http原理__02__HTTP请求方法

    一.HTTP请求方法 根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS ...

  3. 20 由属性查询学习到的ArcMap、javaScripts API相关操作

    因项目需要,想要在属性查询的时候连同相关的图片一并查出来,但是因为要查询的图层众多,且字段不固定,而且还要方便后期维护,因此一个个单独配置并不是最优的解决方法 为实现这个功能,我想到如下几种解决方法 ...

  4. MySQL自动备份shell脚本

    在数据库的日常维护工作中,除了保证业务的正常运行以外,就是要对数据库进行备份,以免造成数据库的丢失,从而给企业带来重大经济损失.通常备份可以按照备份时数据库状态分为热备和冷备,按照备份数据库文件的大小 ...

  5. PHP 可以获取客户端哪些访问信息---来自网页转载

    php是一种弱类型的程序语言,但是最web的 在程序语言中有系统全局函数: $_SERVER <?php echo "".$_SERVER['PHP_SELF'];#当前正在 ...

  6. 最近发现一个php trim的bug

    用trim 排除字符串两边的 “.”:你会发现“耀.”会出现编码错误问题,导致程序出现错误!代码如下: $a = "王者荣耀."; echo trim($a,".&quo ...

  7. ide phpStorm注释模板修改

    1.打开设置 2.找到,如下图所示位置,注意是第二个tab(Includes) 3.再任意空白位置,输入/**,按回车即可出现对应注释内容(其实还可以先 Ctrl + Shift + /,然后删少一个 ...

  8. Kafka: Exactly-once Semantics

    https://www.confluent.io/blog/enabling-exactly-kafka-streams/ https://cwiki.apache.org/confluence/di ...

  9. COMP9021 PRINCIPLES OF PROGRAMMING

    QUIZ 7COMP9021 PRINCIPLES OF PROGRAMMING$ python3 quiz_7.pyEnter four integers: 0 2 2 8Here is the g ...

  10. boost::filesystem总结

    boost::filesystem是Boost C++ Libraries中的一个模块,主要作用是处理文件(Files)和目录(Directories).该模块提供的类boost::filesyste ...