概念:
魔术方法(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)
:析构函数,当对象被删除时调用。
以上是一些常见的魔术方法,另外当我们在定义普通方法时,千万别在函数名前后加双下划线,以免混淆。