A Guide to Python's Magic Methods
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的更多相关文章
- Python 的 Magic Methods 指南(转)
介绍 本指南是数月博客的总结.主题是魔术方法. 什么是魔术方法呢?它们是面向对象Python语言中的一切.它们是你可以自定义并添加“魔法”到类中的特殊方法.它们被双下划线环绕(比如__init__或_ ...
- python的magic methods
https://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/a-guide-to-pythons-magic-methods.htm ...
- 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 ...
- Pthon魔术方法(Magic Methods)-描述器
Pthon魔术方法(Magic Methods)-描述器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.描述器概述 1>.描述器定义 Python中,一个类实现了&quo ...
- Pthon魔术方法(Magic Methods)-反射
Pthon魔术方法(Magic Methods)-反射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.反射概述 运行时,区别于编译时,指的时程序被加载到内存中执行的时候. 反射 ...
- Pthon魔术方法(Magic Methods)-上下文管理
Pthon魔术方法(Magic Methods)-上下文管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.上下文管理方法 __enter__: 进入与此对象相关的上下文.如果 ...
- Pthon魔术方法(Magic Methods)-可调用对象
Pthon魔术方法(Magic Methods)-可调用对象 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.可调用对象方法 __call__: 类中定义一个该方法,实例就可以像 ...
- Pthon魔术方法(Magic Methods)-容器相关方法
Pthon魔术方法(Magic Methods)-容器相关方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.容器相关方法汇总 __len__: 内建函数len(),返回对象的 ...
- Pthon魔术方法(Magic Methods)-运算符重载
Pthon魔术方法(Magic Methods)-运算符重载 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Python运算符对应的魔术方法 1>.比较运算符 <: ...
随机推荐
- 【Hello 2018 C】Party Lemonade
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 处理出凑够2^j最少需要花费多少钱. 即试着把第i种物品买2^(j-i)个,看看会不会更便宜 记录在huafei[0..31]中 然 ...
- Android中关于JNI 的学习(零)简单的样例,简单地入门
Android中JNI的作用,就是让Java可以去调用由C/C++实现的代码,为了实现这个功能.须要用到Anrdoid提供的NDK工具包,在这里不讲怎样配置了,好麻烦,配置了好久. . . 本质上,J ...
- 3/18 Django框架 启动django服务
web框架:本质是socket服务端,socket通常也被称为"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信.web框架就是将 ...
- Dubbo学习总结(4)——Dubbo基于Zookeeper实现分布式实例
入门实例解析 第一:provider-提供服务和相应的接口 创建DemoService接口 [java] view plaincopyprint? <span style="font- ...
- drawerLayout-监听事件四个方法介绍
1.首先我们看一下它的监听事件的生命周期 代码如下 mDrawerLayout.setDrawerListener(new DrawerListener() { @Override public vo ...
- 关于hive里安装mysql出现错误,如何删除指定的主机或用户?(解决Access denied)
前期博客 你可以按照我写的这篇博客去,按照hive的mysql. 1 复习ha相关 + weekend110的hive的元数据库mysql方式安装配置(完全正确配法)(CentOS版本)(包含卸载系统 ...
- springMVC视图解析器——InternalResourceViewResolver(转)
springmvc在处理器方法中通常返回的是逻辑视图,如何定位到真正的页面,就需要通过视图解析器. springmvc里提供了多个视图解析器,InternalResourceViewResolver就 ...
- VUE笔记 - 列表过渡动画 v-enter, v-leave-to | v-enter-active, v-leave-active | v-move
本例要结合过渡动画四个过程的示意图一起理解. https://cn.vuejs.org/v2/guide/transitions.html 疑问: v-for="(item,i) in li ...
- django 简单会议室预约(2)
--我们先打开settings.py 配置文件: import os #指明django APP目录路径 BASE_DIR = os.path.dirname(os.path.dirname(os.p ...
- Java Web学习总结(17)——JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...