python基础关键词触发的魔法方法

with:

  __enter__

  __exit__

dic={}
获取容器中指定元素的行为
dic["name"] = "egon" #设置值   

__setitem__ dic["name"] #取值   __getitem__
类的创建
    __call__

对象的创建
    __new__

    # 如果在__new__中return 了字符串,那么就不会走自身的 __init__ ,而是去走 str 的__init__

构造方法
  __init__
  当一个实例被创建的时候初始化属性的方法
析构方法

    __del__
     # 该内存释放时触发的方法,例垃圾回收机制在回收掉一块空间时
取属性值
        __getattr__
        # 当使用点号获取实例属性时,如果属性不存在就自动调用__getattr__方法

设置属性值
        __setattr__
        # 当设置实例属性时自动调用__setattr__
删除属性
    __delattr__

访问已有属性
    __getattribute__(self, name)
    
# 对象通过点已有属性取值时调用
容器长度
        __len__(self)
        # 返回容器长度
容器迭代器
        __iter__(self)
        # 做迭代器时必须包含此方法,尤其是当内置的iter()方法被调用的时候,以及当使用for x in container:方式循环的时候。迭代器是它们本身的对象,它们必须定义返回self的__iter__方法。
序列反转
        __reversed__(self)
        # 当reversed()被调用时的行为,仅当序列可以是有序的时候实现它,例如对于列表或者元组。
调用in和not in来测试成员是否存在的时候所产生的行为
        __contains__(self, item)
        # 如果没有定义,那么Python会迭代容器中的元素来一个一个比较,从而决定返回True或者False
双链序列通过key找不到容器元素触发
        __missing__(self, key)
        # dict字典类型会有该方法,它定义了key如果在容器中找不到时触发的行为。比如d = {'a': 1}, 当你执行d['name']时,d.__missing__['name']就会被调用。
反射
        __instancecheck__(self, instance)
        # 检查一个实例是不是你定义的类的实例

        __subclasscheck__(self, subclass)
        # 检查一个类是不是你定义的类的子类
复制
        __copy__(self)
        # 当对你的类的实例调用copy.copy()时所产生的行为,浅拷贝

        __deepcopy__(self, memodict={})
        # 当对你的类的实例调用copy.deepcopy()时所产生的行为, 深拷贝
比较
        __cmp__(self, other)    # 是比较方法里面最基本的的魔法方法

        __eq__(self, other)    # 定义相等符号的行为,==
    
        __ne__(self,other)     # 定义不等符号的行为,!=

        __lt__(self,other)       # 定义小于符号的行为,<

        __gt__(self,other)      #  定义大于符号的行为,>

        __le__(self,other)      # 定义小于等于符号的行为,<=
    
        __ge__(self,other)     # 定义大于等于符号的行为,>=    
单目运算符和函数
        __pos__(self)   # 定义负号的行为:-x
 
        __neg__(self)  # 定义正号的行为:+x

        __abs__(self)   #  实现一个内建的abs()函数的行为

        __invert__(self)  #  实现一个取反操作符(~操作符)的行为

        __round__(self, n) # 实现一个内建的round()函数的行为

        __floor__(self) # 实现math.floor()的函数行为

        __ceil__(self)  # 实现math.ceil()的函数行为

        __trunc__(self) # 实现math.trunc()的函数行为        
双目运算符和函数
        __add__(self, other)  # 实现一个加法
    
        __sub__(self, other)   # 实现一个减法

        __mul__(self, other)   # 实现一个乘法

        __floordiv__(self, other)  # 实现一个“//”操作符产生的整除操作()

        __div__(self, other)   # 实现一个“/”操作符代表的除法操作

        __truediv__(self, other)  #  实现真实除法

        __mod__(self, other)   # 实现一个“%”操作符代表的取模操作
    
        __divmod__(self, other)  # 实现一个内建函数divmod()

        __pow__ # 实现一个指数操作(“**”操作符)的行为   或power()调用

        __lshift__(self, other)  # 实现一个位左移操作(<<)的功能

        __rshift__(self, other)  # 实现一个位右移操作(>>)的功能

        __and__(self, other)    # 实现一个按位进行与操作(&)的行为

        __or__(self, other) # 实现一个按位进行或操作的行为

        __xor__(self, other)   #   __xor__(self, other)   
增量运算
        __iadd__(self, other)  #  加法赋值

        __isub__(self, other)  # 减法赋值
    
        __imul__(self, other)  # 乘法赋值

        __ifloordiv__(self, other)  # 整除赋值,地板除,相当于 //= 运算符

        __idiv__(self, other)  # 除法赋值,相当于 /= 运算符

        __itruediv__(self, other)  # 真除赋值

        __imod_(self, other)   # 模赋值,相当于 %= 运算符

        __ipow__  #  乘方赋值,相当于 **= 运算符

        __ilshift__(self, other)  #  左移赋值,相当于 <<= 运算符

        __irshift__(self, other)   # 左移赋值,相当于 >>= 运算符

        __iand__(self, other)  # 与赋值,相当于 &= 运算符

        __ior__(self, other)   # 或赋值

        __ixor__(self, other)  # 异或运算符,相当于 ^= 运算符
类型转换
        __int__(self)  # 转换成整型
    
        __long__(self) # 转换成长整型

        __float__(self)  # 转换成浮点型

        __complex__(self)  # 转换成 复数型

        __oct__(self)  # 转换成八进制

        __hex__(self)  # 转换成十六进制

        __index__(self)  # 如果你定义了一个可能被用来做切片操作的数值型,你就应该定义                __index__
    
        __trunc__(self)   # 当 math.trunc(self) 使用时被调用__trunc__返回自身类型的整型截取

        __coerce__(self, other) # 执行混合类型的运算 
    
     __bytes__(self) # 被 bytes() 调用时的行为

     __hash__(self)  # 被 hash() 调用时的行为
    
     __bool__(self)  # 被 bool() 调用时的行为
  
     __format__(self, format_spec) # 被 format() 调用时的行为
    
     __repr__(self) # 被 repr() 调用时的行为

     __dir__(self) # 当 dir() 被调用时的行为

未完待续....

原文地址:https://www.cnblogs.com/dongxixi/p/11118250.html