一、初始化

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]魔术方法的更多相关文章

  1. python魔术方法

    在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的 ...

  2. Python 魔术方法笔记

    魔术方法总是被__包围, 如__init__ , __len__都是常见的魔术方法,这里主要写一下我遇到的一些魔术方法 setitem 对某个索引值赋值时 即可以进行赋值操作,如 def __seti ...

  3. 记一次 Apache HUE 优化之因使用 Python 魔术方法而遇到的坑

    最近的工作是基于 Apache HUE 做二次开发.刚接手 HUE 的代码的时候,内心是崩溃的:开源的代码,风格很多种, 代码比较杂乱; 虽是基于 Django 开发的,但是项目的结构改变很大; 很多 ...

  4. Python魔术方法-Magic Method

    介绍 在Python中,所有以"__"双下划线包起来的方法,都统称为"Magic Method",例如类的初始化方法 __init__ ,Python中所有的魔 ...

  5. Python 魔术方法指南

    入门 构造和初始化 构造定制类 用于比较的魔术方法 用于数值处理的魔术方法 表现你的类 控制属性访问 创建定制序列 反射 可以调用的对象 会话管理器 创建描述器对象 持久化对象 总结 附录 介绍 此教 ...

  6. python魔术方法总结

    获取属性 __ getattr __(self, name) 定义当用户试图获取一个不存在的属性时的行为 __ getattribute __(self, name) 定义当该类的属性被访问时的行为 ...

  7. 032.Python魔术方法__new__和单态模式

    一 __new__ 魔术方法 1.1 介绍 触发时机:实例化类生成对象的时候触发(触发时机在__init__之前) 功能:控制对象的创建过程 参数:至少一个cls接受当前的类,其他根据情况决定 返回值 ...

  8. Python 魔术方法及调用方式

    魔术方法 调用方式 解释 __new__(cls [,...]) instance = MyClass(arg1, arg2) __new__ 在创建实例的时候被调用 __init__(self [, ...

  9. python魔术方法(__init__,__call__,被双下划线包围的方法)

    转载link:http://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/a-guide-to-pythons-magic-metho ...

随机推荐

  1. JZ2440开发笔记(9)——位置无关代码设计【转】

    b MAIN 和 ldr pc,=MAIN 的区别(谈到代码位置无关性) 看bootloader的时候经常看到这两种写法,不太明白区别,网上查了查.其实看了之后还是一头雾水? 其中,2和3 似乎是一个 ...

  2. 股票中的数学:EMA的推导01

    说明:本人并不炒股,原因很简单:没钱.当然了,作为一名IT工作者,因为工作需要和个人兴趣,就有了本系列文章.阅读本系列文章不需要任何高深的知识,哪怕是一个像我这样从未真正炒过股的人也没关系.但本文还是 ...

  3. aix i节点

    文件系统与inode• UNIX文件系统有很多种类型,如HFS,NFS,JFS,CDFS.虽然文件系统种类很多,但是也有着一些相同的数据结构:超级块.inode.目录等等. • inode译成中文就是 ...

  4. Windows Azure中对映像的管理及操作

    映像是用作新虚拟机的创建模板的 .vhd 文件.映像是一个模板,因为它与已配置的虚拟机不同,没有计算机名称和用户帐户设置等特定设置.可以通过 Windows Azure 管理门户使用现有映像,或创建您 ...

  5. 使用Visual Studio 2013编写可维护的本地可视化(natvis)

    在Visual Studio 2012中,我们介绍了创建可视化使用原生类型的能力natvis文件. Visual Studio 2013中包含了一些改进,使其更容易编写可视化的类,在内部利用收集来存储 ...

  6. 关于Eclispse连接Mysql的Jdbc

    1.在Eclipse中新建Java工程 2.引入JDBC库(在bulid path 的extenrnal里) 3. 1)导入sql包(import java.sql.*) 2)加载(注册)mysql ...

  7. Centos System Info

    系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # ho ...

  8. 迷宫 (BFS)

    <挑战程序设计> P34 第一次使用pair 1.头文件:<utility>2.成员:mypair.first, mypair.second3.运算符:<.>.&l ...

  9. Java空字符串与null的区别和判断字符串是否为空的方法

    Java空字符串与null的区别: 1.类型null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也 ...

  10. local storage 简单应用‘’记住密码’

    前些时候一直用cookie等来进行登录页面记住面膜操作,但是由于其存储容量小等缘故,所以后来转向local storage,原理为:当用户勾选记住密码时,local storage 存储用户名密码同时 ...