python魔法函数

一、魔法函数

  • 形式:以带双下划线开头和结尾
  • 功能:帮助类增强一些功能。这样方法可以在特定的情况下被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__ 
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值