魔法方法 含义
  基本的魔法方法
__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. 06-Python入门学习-元组、字典、集合类型

    一.元组 一:基本使用:tuple 1 用途: 记录多个值,当多个值没有改的需求,此时用元组更合适 2 定义方式: 在()内用逗号分隔开多个任意类型的值 t=(1,1.3,'xx',('a','b') ...

  2. python-ironicclient使用

    使用cli from ironicclient import client kwargs = {'os_username': 'ironic', 'os_password': 'IRONIC_PASS ...

  3. centos如何设置固定IP

    ### centos6.5版本 编辑ifcfg-eth0 vi /etc/sysconfig/network-scripts/ifcfg-eth0 参照下面代码修改自己的配置 ############ ...

  4. [LeetCode] Find Eventual Safe States 找到最终的安全状态

    In a directed graph, we start at some node and every turn, walk along a directed edge of the graph.  ...

  5. 推荐几种Java任务调度的实现

    几种任务调度的 Java 实现方法与比较--转载 原文:http://www.ibm.com/developerworks/cn/java/j-lo-taskschedule/ 写了一天的作业调度,这 ...

  6. 使用Java客户端操作elasticsearch(二)

    承接上文,使用Java客户端操作elasticsearch,本文主要介绍 常见的配置 和Sniffer(集群探测) 的使用. 常见的配置 前面已介绍过,RestClientBuilder支持同时提供一 ...

  7. getsockopt和setsockopt函数

    在Unix网络编程中通常用到getsockopt和setsockopt两个函数来获取和设置套接口的选项. getsockopt()函数用于获取任意类型.任意状态套接口的选项当前值,并把结果存入optv ...

  8. ThinkPHP5 添加多个文字水印及疑难解答

    public function imageload() { $imgpath = ROOT_PATH . 'public' . DS . 'static' . DS . 'www' . DS . 'i ...

  9. Codeforces 1154 - A/B/C/D/E/F/G - (Undone)

    链接:https://codeforces.com/contest/1154 A - Restoring Three Numbers - [水] #include<bits/stdc++.h&g ...

  10. POJ 2533 - Longest Ordered Subsequence - [最长递增子序列长度][LIS问题]

    题目链接:http://poj.org/problem?id=2533 Time Limit: 2000MS Memory Limit: 65536K Description A numeric se ...