[python]魔术方法
一、初始化:
1、__new__方法,初始化过程中第一个用到的方法(用处不大)。
2、之后,__init__方法,构造方法。
3、最后,在对象回收时,调用__del__方法。如果解释器退出时,对象还存在,则不能保证__del__能够执行。
二、比较
__cmp__(self, other) 定义了比较的行为。
__eq__(self, other) 定义了等号的行为, == 。
__ne__(self, other) 定义了不等号的行为, != 。
__lt__(self, other) 定义了小于号的行为, < 。
__gt__(self, other) 定义了大于等于号的行为, >= 。
class Word(str):
'''存储单词的类,定义比较单词的几种方法''' def __gt__(self, other):
return len(self) > len(other)
def __lt__(self, other):
return len(self) < len(other)
def __ge__(self, other):
return len(self) >= len(other)
def __le__(self, other):
return len(self) <= len(other)
三、运算符
1、一元运算符:正/负/abs(绝对值)/~(取反)
2、普通运算符:加减乘除/取模/指数/与或等都有对应的魔术方法,以及反运算方法。
四、类型转换
__int__(self)实现整型的强制转换。
五、表现你的类
__str__(self)定义了str()调用的时候的返回值,人类可读。
__repr__(self)定义了repr()调用的时候的返回值,机器可读。
__unicode__(self)定义了unicode()调用的时候的返回值,与str()类似。
__hash__(self)定义了当hash()调用的时候的返回值,它返回一个整型,用来在字典中快速比较。
__nozero__(self)定义了bool()调用时候的返回值。
六、控制属性访问
__getattr__(self, name) 可以定义当用户试图获取一个不存在属性时的行为。适用于对普通拼写错误的获取和重定向。
__setattribute__(self, name) 可以定义当用户获取属性时的行为。
__setattr__(self, name) 可以定义当用户设置属性时的行为。
__delattr__(self, name) 可以定义当用户删除属性时的行为。
七、序列
class FunctionalList:
'''一个封装了一些附加魔术方法比如 head, tail, init, last, drop, 和take的列表类。
''' def __init__(self, values=None):
if values is None:
self.values = []
else:
self.values = values def __len__(self):
return len(self.values) def __getitem__(self, key):
#如果键的类型或者值无效,列表值将会抛出错误
return self.values[key] def __setitem__(self, key, value):
self.values[key] = value def __delitem__(self, key):
del self.values[key] def __iter__(self):
return iter(self.values) def __reversed__(self):
return reversed(self.values) def append(self, value):
self.values.append(value)
def head(self):
return self.values[0]
def tail(self):
return self.values[1:]
def init(self):
#返回一直到末尾的所有元素
return self.values[:-1]
def last(self):
#返回末尾元素
return self.values[-1]
def drop(self, n):
#返回除前n个外的所有元素
return self.values[n:]
def take(self, n):
#返回前n个元素
return self.values[:n]
八、反射
isinstance()对应于__instancecheck__(self, instance)
issubclass()对应于__subclasscheck__(self, instance)
九、可以调用的对象__call__(self, args),主要用于改变实例的状态。
十、会话管理,__enter__和__exit__
十一、序列化对象
[python]魔术方法的更多相关文章
- python魔术方法
在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的 ...
- Python 魔术方法笔记
魔术方法总是被__包围, 如__init__ , __len__都是常见的魔术方法,这里主要写一下我遇到的一些魔术方法 setitem 对某个索引值赋值时 即可以进行赋值操作,如 def __seti ...
- 记一次 Apache HUE 优化之因使用 Python 魔术方法而遇到的坑
最近的工作是基于 Apache HUE 做二次开发.刚接手 HUE 的代码的时候,内心是崩溃的:开源的代码,风格很多种, 代码比较杂乱; 虽是基于 Django 开发的,但是项目的结构改变很大; 很多 ...
- Python魔术方法-Magic Method
介绍 在Python中,所有以"__"双下划线包起来的方法,都统称为"Magic Method",例如类的初始化方法 __init__ ,Python中所有的魔 ...
- Python 魔术方法指南
入门 构造和初始化 构造定制类 用于比较的魔术方法 用于数值处理的魔术方法 表现你的类 控制属性访问 创建定制序列 反射 可以调用的对象 会话管理器 创建描述器对象 持久化对象 总结 附录 介绍 此教 ...
- python魔术方法总结
获取属性 __ getattr __(self, name) 定义当用户试图获取一个不存在的属性时的行为 __ getattribute __(self, name) 定义当该类的属性被访问时的行为 ...
- 032.Python魔术方法__new__和单态模式
一 __new__ 魔术方法 1.1 介绍 触发时机:实例化类生成对象的时候触发(触发时机在__init__之前) 功能:控制对象的创建过程 参数:至少一个cls接受当前的类,其他根据情况决定 返回值 ...
- Python 魔术方法及调用方式
魔术方法 调用方式 解释 __new__(cls [,...]) instance = MyClass(arg1, arg2) __new__ 在创建实例的时候被调用 __init__(self [, ...
- python魔术方法(__init__,__call__,被双下划线包围的方法)
转载link:http://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/a-guide-to-pythons-magic-metho ...
随机推荐
- JZ2440开发笔记(7)——2440启动方式
JZ2440的启动方式有两种,一种是从NOR FLASH中启动,还有一种就是从NAND FLASH中启动. 如果从NOR FLASH启动,CPU会访问NOR FLASH的0地址,而0地址位于BANK0 ...
- 如何在Azure上动态配置IP地址
微软最近对 Windows Azure 网站进行了升级,并启用了IIS8的动态 IP 限制模块.现在,开发人员可以为其网站启用并配置动态 IP 限制功能(或简称 DIPR). 可以通过以下链接查看此 ...
- localtime和localtime_r
上程序: #include <cstdlib> #include <iostream> #include <time.h> #include <stdio.h ...
- HDOJ-ACM1016(JAVA) 字典序全排列,并剪枝
转载声明:原文转自http://www.cnblogs.com/xiezie/p/5576273.html 题意: 一个环是用图中所示的n个圆组成的.把自然数1.2.…….n分别放入每个圆中,并在相邻 ...
- ehcache简单使用
项目中需要实现一个功能,定时查询FTP服务器某个目录下的文件,并及时下载至本机,同时不能消耗太多系统资源. 最后实现是使用ehcache,将文件路径和文件大小缓存,如果前后两次无变化,则忽略.如果同一 ...
- 教程-(SQL DBE、ADO连接)+(Firebird火鸟+DbExpress)+(VF DBF数据库)+(DB Paradox)
DBE 连接SQL Server显然用ADO或DBEXPRESS更有优势,起码连接起来比较方便. BDE的话可以用如下方法:(以下以Delphi7为例,其它版本的DELPHI请自己摸索一下,不过基本相 ...
- requirejs 打包参数
https://github.com/requirejs/r.js/blob/master/build/example.build.js
- iOS 使用fir、 蒲公英 进行内部测试
fir 蒲公英需要去注册账号并认证,按提示即可完成. 测了公司账号.个人开发账号,2个都可以用,就是要在配置文件里加上测试者的udid. 步骤: 1.添加测试机的udid edit配置文件,添加刚刚加 ...
- Win8启用便签
启动或显示 Sticky Notes : Win+R--->StikyNot.exe 备份Sticky Notes保存位置 : %AppData%\Microsoft\Sticky Notes\ ...
- [HTTP2] HTTP1 probs and HTTP2 saves
1. HOL (HEADS of LINE BLOCKING) Too many requests in the header tag. Broswer can allow 6 reuqest to ...