龙空技术网

5分钟掌握Python(十一)之魔术方法

小文述说 55

前言:

目前同学们对“cmp函数的用法python”大概比较看重,姐妹们都想要分析一些“cmp函数的用法python”的相关内容。那么小编同时在网摘上网罗了一些有关“cmp函数的用法python””的相关文章,希望同学们能喜欢,我们快快来学习一下吧!

1)定义:双下划线包起来的方法,都统称为"魔术方法"。

方法

说明

__getattr__(self, name)

该方法定义了你试图访问一个不存在的属性时的行为。因此,重载该方法可以实现捕获错误拼写然后进行重定向, 或者对一些废弃的属性进行警告。

__setattr__(self, name, value)

定义了对属性进行赋值和修改操作时的行为。不管对象的某个属性是否存在,都允许为该属性进行赋值.有一点需要注意,实现 __setattr__ 时要避免"无限递归"的错误,

__delattr__(self, name)

__delattr__ 与 __setattr__ 很像,只是它定义的是你删除属性时的行为。实现 __delattr__ 是同时要避免"无限递归"的错误

__getattribute__(self, name)

__getattribute__ 定义了你的属性被访问时的行为,相比较,__getattr__ 只有该属性不存在时才会起作用。因此,在支持 __getattribute__的 Python 版本,调用__getattr__ 前必定会调用 __getattribute__``__getattribute__ 同样要避免"无限递归"的错误。

2)对象的描述器:

一个描述器是一个有“绑定行为”的对象属性 (object attribute),它的访问控制被描述器协议方法重写。

这些方法是 __get__(), __set__() , 和 __delete__() 。

3)自定义容器:

功能

说明

自定义不可变容器类型

需要定义 __len__ 和 __getitem__ 方法

自定义可变类型容器

在不可变容器类型的基础上增加定义 __setitem__ 和 __delitem__

自定义的数据类型需要迭代

需定义 __iter__

返回自定义容器的长度

需实现 __len__(self)

自定义容器可以调用 self[key] ,如果 key 类型错误,抛出TypeError ,如果没法返回key对应的数值时,该方法应该抛出ValueError

需要实现 __getitem__(self, key)

当执行 self[key] = value 时

调用是 __setitem__(self, key, value)这个方法

当执行 del self[key] 方法

其实调用的方法是 __delitem__(self, key)

当你想你的容器可以执行 for x in container: 或者使用 iter(container) 时

需要实现 __iter__(self) ,该方法返回的是一个迭代器

4)比较运算符:

魔术方法

说明

__cmp__(self, other)

如果该方法返回负数,说明 self < other; 返回正数,说明 self > other; 返回 0 说明 self == other。强烈不推荐来定义 __cmp__ , 取而代之, 最好分别定义 __lt__, __eq__ 等方法从而实现比较功能。 __cmp__ 在 Python3 中被废弃了。

__eq__(self, other)

定义了比较操作符 == 的行为

__ne__(self, other)

定义了比较操作符 != 的行为

__lt__(self, other)

定义了比较操作符 < 的行为

__gt__(self, other)

定义了比较操作符 > 的行为

__le__(self, other)

定义了比较操作符 <= 的行为

__ge__(self, other)

定义了比较操作符 >= 的行为

5)算术运算符:

魔术方法

说明

__add__(self, other)

实现了加号运算

__sub__(self, other)

实现了减号运算

__mul__(self, other)

实现了乘法运算

__floordiv__(self, other)

实现了 // 运算符

___div__(self, other)

实现了/运算符. 该方法在 Python3 中废弃. 原因是 Python3 中,division 默认就是 true division

__truediv__(self, other)

实现了 true division. 只有你声明了 from __future__ import division 该方法才会生效

__mod__(self, other)

实现了 % 运算符, 取余运算

__divmod__(self, other)

实现了 divmod() 內建函数

__pow__(self, other)

实现了 ** 操作. N 次方操作

__lshift__(self, other)

实现了位操作 <<

__rshift__(self, other)

实现了位操作 >>

__and__(self, other)

实现了位操作 &

__or__(self, other)

实现了位操作 |

__xor__(self, other)

实现了位操作 ^

标签: #cmp函数的用法python