Python常用魔术方法一览表
Python 中的类有一些特殊的方法,方法名前后分别添加了两个下画线“__”,这些方法统称“魔术方法”(Magic Method),使用魔术方法可以实现运算符重载,也可以将复杂的逻辑封装成简单的 API。
Python 3 中常用的魔术方法如表 1 所示。
以下代码使用魔术方法,采用运算符重载的方式实现了向量的加减法操作:
Python 3 中常用的魔术方法如表 1 所示。
魔术方法 | 描述 |
---|---|
__new__ | 创建类并返回这个类的实例 |
__init__ |
可理解为“构造函数”,在对象初始化的时候调用,使用传入的参数初始化该实例
|
__del__ | 可理解为“析构函数”,当一个对象进行垃圾回收时调用 |
__metaclass__ | 定义当前类的元类 |
__class__ | 查看对象所属的类 |
__base__ | 获取当前类的父类 |
__bases__ | 获取当前类的所有父类 |
__str__ | 定义当前类的实例的文本显示内容 |
__getattribute__ | 定义属性被访问时的行为 |
__getattr__ | 定义试图访问一个不存在的属性时的行为 |
__setattr__ | 定义对属性进行赋值和修改操作时的行为 |
__delattr__ | 定义删除属性时的行为 |
__copy__ | 定义对类的实例调用 copy.copy() 获得对象的一个浅拷贝时所产生的行为 |
__deepcopy__ | 定义对类的实例调用 copy.deepcopy() 获得对象的一个深拷贝时所产生的行为 |
__eq__ | 定义相等符号“==”的行为 |
__ne__ | 定义不等符号“!=”的行为 |
__lt__ | 定义小于符号“<”的行为 |
__gt__ |
定义大于符号“>”的行为
|
__le__ | 定义小于等于符号“<=”的行为 |
__ge__ | 定义大于等于符号“>=”的行为 |
__add__ | 实现操作符“+”表示的加法 |
__sub__ | 实现操作符“-”表示的减法 |
__mul__ | 实现操作符“*”表示的乘法 |
__div__ | 实现操作符“/”表示的除法 |
__mod__ | 实现操作符“%”表示的取模(求余数) |
__pow__ | 实现操作符“**”表示的指数操作 |
__and__ | 实现按位与操作 |
__or__ | 实现按位或操作 |
__xor__ | 实现按位异或操作 |
__len__ | 用于自定义容器类型,表示容器的长度 |
__getitem__ | 用于自定义容器类型,定义当某一项被访问时,使用 self[key] 所产生的行为 |
__setitem__ | 用于自定义容器类型,定义执行 self[key]=value 时产生的行为 |
__delitem__ | 用于自定义容器类型,定义一个项目被删除时的行为 |
__iter__ | 用于自定义容器类型,一个容器迭代器 |
__reversed__ | 用于自定义容器类型,定义当 reversed( ) 被调用时的行为 |
__contains__ | 用于自定义容器类型,定义调用 in 和 not in 来测试成员是否存在的时候所产生的行为 |
__missing__ | 用于自定义容器类型,定义在容器中找不到 key 时触发的行为 |
以下代码使用魔术方法,采用运算符重载的方式实现了向量的加减法操作:
class Vector: a = None b = None def __init__(self, a, b): self.a = a self.b = b def __str__(self): return '向量(%d, %d)' % (self.a, self.b) def __add__ (self, other): return Vector(self.a + other.a, self.b + other.b) def __sub__(self, other): return Vector(self.a - other.a, self.b - other.b) v1 = Vector(1, 2) v2 = Vector(3, 4 ) print(v1, " + ", v2, "=", v1 + v2) print(v1, " - ", v2, "=", v1 - v2)上述代码的运行结果如下所示:
>>> class Vector:
... a = None
... b = None
... def __init__(self, a, b):
... self.a = a
... self.b = b
... def __str__(self):
... return '向量(%d, %d)' % (self.a, self.b)
... def __add__ (self, other):
... return Vector(self.a + other.a, self.b + other.b)
... def __sub__(self, other):
... return Vector(self.a - other.a, self.b - other.b)
>>> v1 = Vector(1, 2)
>>> v2 = Vector(3, 4 )
>>> print(v1, " + ", v2, "=", v1 + v2)
向量(1, 2) + 向量(3, 4) = 向量(4, 6)
>>> print(v1, " - ", v2, "=", v1 - v2)
向量(1, 2) - 向量(3, 4) = 向量(-2, -2)
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算