一、魔法函数
- 形式:以带双下划线开头和结尾
- 功能:帮助类增强一些功能。这样方法可以在特定的情况下被Python调用,而几乎不用直接调用。
- 调用:Python解释器自己会知道什么情况下会调用,不需要直接调用
- 不能自己定义
- 魔法函数可以写到任意一个类中,与继承无关。
二、使用举例
Python中这个__repr__函数,对应repr(object)这个函数,返回一个可以用来表示对象的可打印字符串.如果我们直接打印一个类,向下面这样
class A():
def __init__(self,name=None,id=1):
self.id=id
self.name=name
if __name__ == '__main__':
a=A()
print(a)
输出结果:
<__main__.A object at 0x0000018DF8E7EAC8>
不是很友好,返回了一个对象的内存地址。我们改成下面再次输出
class A():
def __init__(self,name=None,id=1):
self.id=id
self.name=name
def __repr__(self):
return "进入函数"
if __name__ == '__main__':
print(A())
输出结果
进入函数
三、常用的魔法函数
1、非数学运算类魔法函数
分类 | 魔法函数 | 映射对象(调用相应映射时,魔法函数被执行) | 备注 |
---|---|---|---|
字符串表示 | __repr__ | ||
__str__ | |||
集合序列相关 | __len__ | ||
__getitem__ | |||
__setitem__ | |||
__delitem__ | |||
__contains__ | |||
迭代相关 | __iter__ | ||
__next__ | |||
可调用 | __call__ | ||
with上下文管理器 | __enter__ | ||
__exit__ | |||
数值转换 | __abs__ | ||
__bool__ | |||
__int__ | |||
__float__ | |||
__hash__ | |||
__index__ | |||
元类相关 | __new__ | ||
__init__ | |||
属性相关 | __getattr__ | ||
__setattr__ | |||
__getattribute__ | |||
__setattribute__ | |||
__dir__ | |||
属性描述符 | __get__ | ||
__set__ | |||
__delete__ | |||
协程 | __await__ | ||
__aiter__ | |||
__anext__ | |||
__aenter__ | |||
__aexit__ |
2、数学运算类魔法函数
分类 | 魔法函数 | 映射对象(调用相应映射时,魔法函数被执行) | 备注 |
---|---|---|---|
一元运算符 | __neg__ | - | 实现取负操作 |
__pos__ | + | 实现取正操作 | |
__abs__ | abs() | 实现绝对值操作 | |
__invert__ | 实现取反操作 | ||
__floor__ | 向下取整 | ||
__ceil__ | 向上取整 | ||
__trunc__ | 距离最近的整数(四舍五入?) | ||
富比较函数 | __lt__ | < | |
__le__ | <= | ||
__eq__ | == | ||
__ne__ | != | ||
__gt__ | > | ||
__ge__ | >= | ||
算术运算符 | _add__ | + | 加法 |
__sub__ | - | 减法 | |
__mul__ | * | 乘法 | |
__truediv__ | / | 除法 | |
__floordiv__ | // | 整数除法 | |
__mod__ | % | ||
__divmod__ | divmod() | ||
__pow__ | ** 或 pow() | ||
__round__ | round() | ||
反向算术运算符 | __radd__ | ||
__rsub__ | |||
__rmul__ | |||
__rtruediv__ | |||
__rfloordiv__ | |||
__rmod__ | |||
__rpow__ | |||
增量赋值算术运算符 | __iadd__ | += | |
__isub__ | -= | ||
__imul__ | *= | ||
__itruediv__ | /= | ||
__ifloordiv__ | //= | ||
__imod__ | %= | ||
__ipow__ | |||
位运算符 | __invert__ | ~ | |
__lshift__ | << | ||
__rshift__ | >> | ||
__and__ | & | ||
__or__ | | | ||
__xor__ | ^ | ||
反向位运算符 | __rlshift__ | ||
__rrshift__ | |||
__rand__ | |||
__rxor__ | |||
__ror__ | |||
增量赋值位运算符 | __ilshift__ | ||
__irshift__ | |||
__iand__ | |||
__ixor__ | |||
__ior__ |