Book Source:[https://rszalski.github.io/magicmethods/]

magic methods: 名称前后有双下划线的方法

构造函数和初始化

初始化类实例时,__new__ 方法比__init__方法首先被调用

__del__:当被作为垃圾回收时调用的方法,可以用来做一些额外的清理工作。最好不要使用它来清理占用的资源(端口,文件流,链接),保持良好的代码习惯

自定义类操作函数的使用

两个对象的比较通常是比较这两个对象的引用

__eq__: 可用于 == 比较

__ne__:可用于 != 比较

__lt__:可用于 < 比较

__gt__:可用于 > 比较

__le__:可用于 《= 比较

__ge__:可用于 >= 比较

__cmp__: self < other 返回负数, self == other 返回0,self > other 返回正数,可用于以上所有比较

优先使用__gt__(), __lt__(), __eq__(),如果找不到则使用__cmp__()

string 类型默认是按照字母表前后顺序比较大小的

也可用装饰器@total_ordering 2.7+/3.4+

数字类型的magic method:

一元运算操作符和方法:

__pos___:  +some_object

__neg__:  -some_object

_abs__: abs(some_object)

__invert__:~some_object(取反操作符)

__round__:round(some_object)

__floor__:math.floor(向下取整)

__ceil__:math.ceil(向上取整)

__trunc__:math.trunc(Truncates x to the nearest Integral toward 0.)

正规算术运算符(some_object + other)

__add__:加法

__sub__:减法

__mul__:乘法

__floordiv__:整数除法

__div__:除法

__truediv__:true division

__mod__:取余%

__divmod__:长除法

__pow__:平方 **

__lshift__:<<

__rshift__:>>

__and__:&

__or__:|

__xor__: ^

反向运算符:(other + some_object)

__radd__/ __rsub__ / __rmul__ /__rfloordiv__ /__rdiv__ /__rtruediv__ /__rmod__ /__rdivmod__ /__rpow__ /__rlshift__ /__rrshift__ /__rand__ /__ror__ /__rxor__

Augmented assignment ( a += b => a = a+b => __iadd__  means += )

__iadd__/ __isub__ / __imul__ /__ifloordiv__ /__idiv__ /__itruediv__ /__imod__ /__idivmod__ /__ipow__ /__ilshift__ /__irshift__ /__iand__ /__ior__ /__ixor__

Type conversion magic methods

___int__ /__long__ /__float__ /__complex__ /__oct__ /__hex__ /__index__ /__trunc__ /__coerce__

Representing your Classes

__str__:str()

__repr__:repr()

__unicode__:unicode()

__format__:格式化

__hash__:hash()

__nonzero__:bool()

__dir__:dir()

__sizeof__:sys.getsizeof()

Controlling Attribute Access

__len__: return length

__getitem__: self[key]

__setitem__:self[key]=value

__delitem__:del self[key]

__iter__:return iterator => for item in object:

__reversed__:reversed() [class should be ordered]

__contains__: 用于 in 和 not in 操作

__missing__:self[key] key不存在时被调用 self.__missing__(key)

Reflection

__instancecheck__:isinstance(instance,class)

__subclasscheck__:issubclass(subclass,class)

Callable Objects

__call__: 可以让类实例当做方法来用 objectA = Class() =>  objectA(args)

Context Managers

主要用于 with 关键字

__enter__(self): with 块 开始要做的事情,并将返回值赋值给目标 或者 as 后面的变量

__exit__(self,exception_type,exception_value,traceback):with 块结束时要做的事情,正常情况下要返回 True

Abstracet Base Classes

See http://docs.python.org/2/library/abc.html 

Building Descriptor Objects

reference : http://python.jobbole.com/83562/

__set__ /__get__ /__delete__

Copying

__copy__: copy.copy()

__deepcopy__:copy.deepcopy()

Pickling Your Objects

这是有关数据存储序列化的东西

__getinitargs__

__getnewargs__

__getstate__

__setstate__

__reduce__

__reduce_ex__

A Guide to Python's Magic Methods的更多相关文章

  1. Python 的 Magic Methods 指南(转)

    介绍 本指南是数月博客的总结.主题是魔术方法. 什么是魔术方法呢?它们是面向对象Python语言中的一切.它们是你可以自定义并添加“魔法”到类中的特殊方法.它们被双下划线环绕(比如__init__或_ ...

  2. python的magic methods

    https://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/a-guide-to-pythons-magic-methods.htm ...

  3. Introspection in Python How to spy on your Python objects Guide to Python introspection

    Guide to Python introspection https://www.ibm.com/developerworks/library/l-pyint/ Guide to Python in ...

  4. Pthon魔术方法(Magic Methods)-描述器

    Pthon魔术方法(Magic Methods)-描述器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.描述器概述 1>.描述器定义 Python中,一个类实现了&quo ...

  5. Pthon魔术方法(Magic Methods)-反射

    Pthon魔术方法(Magic Methods)-反射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.反射概述 运行时,区别于编译时,指的时程序被加载到内存中执行的时候. 反射 ...

  6. Pthon魔术方法(Magic Methods)-上下文管理

    Pthon魔术方法(Magic Methods)-上下文管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.上下文管理方法 __enter__: 进入与此对象相关的上下文.如果 ...

  7. Pthon魔术方法(Magic Methods)-可调用对象

    Pthon魔术方法(Magic Methods)-可调用对象 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.可调用对象方法 __call__: 类中定义一个该方法,实例就可以像 ...

  8. Pthon魔术方法(Magic Methods)-容器相关方法

    Pthon魔术方法(Magic Methods)-容器相关方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.容器相关方法汇总 __len__: 内建函数len(),返回对象的 ...

  9. Pthon魔术方法(Magic Methods)-运算符重载

    Pthon魔术方法(Magic Methods)-运算符重载 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Python运算符对应的魔术方法 1>.比较运算符 <: ...

随机推荐

  1. HDU1023 Train Problem II【Catalan数】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1023 题目大意: 一列N节的火车以严格的顺序到一个站里.问出来的时候有多少种顺序. 解题思路: 典型 ...

  2. 19.Node.js EventEmitter

    转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里 ...

  3. 新手前端笔记之--初识css

    css样式表是为了容纳与html文档分离出来的样式属性而产生的,所以她理所当然的包含两个部分:1.样式的表示,使用{属性1:属性值:属性2:属性值:...},2.样式与标签的对应(如何找的对应标签), ...

  4. HDU 2281 Square Number Pell方程

    http://acm.hdu.edu.cn/showproblem.php?pid=2281 又是一道Pell方程 化简构造以后的Pell方程为 求出其前15个解,但这些解不一定满足等式,判断后只有5 ...

  5. 理解宏的使用 extern

    如何定义一个全局变量在一个文件中,然后在其它文件中调用就行,而不需要多次extern外部声明. 由于之前的公司的程序中全局的变量使用得很多,在多个.C文件中会调用,不这样处理做的话就会多处进行exte ...

  6. cocos2d-x嵌入移动MM短代支付IAP2.4的SDK,点击支付崩溃的解决的方法

    凡是用IAP2.4,调用purchase.order 游戏崩溃.logcat报错是: 06-16 18:43:42.944: E/AndroidRuntime(8526): FATAL EXCEPTI ...

  7. 1.2 Use Cases中 Messaging官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ 下面是一些关于Apache kafka 流行的使用场景.这些领域的概述,可查看博客文 ...

  8. 【CS Round #46 (Div. 1.5) C】Set Subtraction

    [链接]h在这里写链接 [题意] 一开始有n个数字,然后有一个数字X,把每个数字都减去X,又生成N个新的数字. 然后把这2*N个数字混在一起. 告诉你这2*N个数字是什么.让你复原出原来的N个数字,以 ...

  9. Java Web学习总结(13)——JSP入门

    一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...

  10. amazeui学习笔记--css(基本样式2)--基础设置Base

    amazeui学习笔记--css(基本样式2)--基础设置Base 一.总结 1.盒子模型:外margin,内padding,这里的内外指的边框 2.border-box:Amaze UI 将所有元素 ...