• 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() 被调用时的行为
  • 相关阅读:
    Kostya Keygen#2分析
    一个简单的windows勒索软件分析
    MSRHook与SSDTHook
    VS2013中调驱动
    VMProtect1.63分析
    Linux内核分析总结
    进程的切换和系统的一般执行过程
    可执行程序的装载
    进程的描述和进程的创建
    扒开系统调用的三层皮(下)
  • 原文地址:https://www.cnblogs.com/gwklan/p/11140127.html
Copyright © 2020-2023  润新知