概念:
魔术方法(Magic Methods),也叫魔法方法。是指有特殊用途和意义的方法。
定义:
方法在定义时,方法名使用双下划线开头和结尾。
一些常见的魔术方法:
- 初始化方法:
__init__(self, ...):初始化方法,在调用构造器语法创建对象的时候会被自动调用。
- 字符串表示方法:
__str__(self):返回对象的“非正式”或可打印的字符串表示,在调用print()函数输出对象时会自动调用。__repr__(self):返回对象的“官方”字符串表示,在把对象放到容器中,用print()函数输出容器时会自动调用。
- 容器类型相关方法:
__len__(self):返回容器中的元素数量,在使用len(obj)函数时自动调用。__getitem__(self, key):返回容器中指定位置的元素,使用obj[key]语法访问元素时时自动调用。__setitem__(self, key, value):设置容器中指定位置的元素的值,使用obj[key] = value语法设置元素值时自动调用。__delitem__(self, key):删除容器中指定位置的元素,使用del obj[key]语法删除元素时自动调用。__iter__(self):返回容器的迭代器,使用iter(obj)函数或在循环中迭代对象时自动调用__contains__(self, item):如果容器包含指定的元素,则返回True,使用item in obj语法时自动调用。
- 运算符重载方法:
__add__(self, other):实现加法操作,使用+运算符时自动调用。(后面类似)__sub__(self, other):实现减法操作。__mul__(self, other):实现乘法操作。__truediv__(self, other):实现除法操作。__floordiv__(self, other):实现整除操作。__mod__(self, other):实现取模操作。__pow__(self, other, modulo=None):实现幂运算。
- 上下文管理协议方法:
__enter__(self):进入上下文管理器的运行时自动调用。__exit__(self, exc_type, exc_val, exc_tb):退出上下文管理器的运行时自动调用。
- 属性访问控制方法:
__getattr__(self, name):当尝试访问一个不存在的属性时调用。__setattr__(self, name, value):尝试设置属性时调用。__delattr__(self, name):尝试删除属性时调用。
- 其他常用魔术方法:
__call__(self, *args, **kwargs):允许一个类的实例像函数一样被调用,在对象被当作函数调用时调用。__new__(cls, *args, **kwargs):在创建对象时首先调用,用于控制对象的创建过程,在调用构造器语法创建对象之前,通常用于实现单例模式等高级功能。__del__(self):析构函数,当对象被删除时调用。
以上是一些常见的魔术方法,另外当我们在定义普通方法时,千万别在函数名前后加双下划线,以免混淆。