zoukankan      html  css  js  c++  java
  • 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() 被调用时的行为
  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/gwklan/p/11140127.html
Copyright © 2011-2022 走看看