• Python 运算符重载


    构造函数与表达式: __init__, __sub__

    常见运算符重载方法

    method overload call
    __init__ 构造函数 对象创建: X = Class(args)
    __del__ 析构函数 X对象收回
    __add__ 云算法+ 如果没有_iadd_, X+Y, X+=Y
    __or__ 运算符| 如果没有_ior_,X|Y, X|=Y
    _repr__, __str__ 打印,转换 print(X),repr(X),str(X)
    __call__ 函数调用 X(*args, **kwargs)
    __getattr__ 点号运算 X.undefined
    __setattr__ 属性赋值语句 X.any=value
    __delattr__ 属性删除 del X.any
    __getattribute__ 属性获取 X.any
    __getitem__ 索引运算 X[key],X[i:j]
    __setitem__ 索引赋值语句 X[key],X[i:j]=sequence
    __delitem__ 索引和分片删除 del X[key],del X[i:j]
    __len__ 长度 len(X),如果没有__bool__,真值测试
    __bool__ 布尔测试 bool(X)
    __lt__, __gt__,
    __le__, __ge__,
    __eq__, __ne__
    特定的比较 X<Y,X>Y,X<=Y,X>=Y,
    X==Y,X!=Y
    注释:(lt: less than, gt: greater than,
      le: less equal, ge: greater equal,
      eq: equal, ne: not equal
    __radd__ 右侧加法 other+X
    __iadd__ 实地(增强的)加法 X+=Y(or else __add__)
    __iter__, __next__ 迭代环境 I=iter(X), next()
    __contains__ 成员关系测试 item in X(任何可迭代)
    __index__ 整数值 hex(X), bin(X),  oct(X)
    __enter__, __exit__ 环境管理器 with obj as var:
    __get__, __set__,
    __delete__
    描述符属性 X.attr, X.attr=value, del X.attr
    __new__ 创建 在__init__之前创建对象

    索引和分片: __getitem__, __setitem__

    如果在类中定义的话,则对于实例的索引运算,会自动调用__getitem__。当实例X出现X[i]这样的索引运算时,Python会自动调用__getitem__方法

    拦截分片

    索引迭代: __getitem__

    迭代器对象: __iter__,  __next__

    尽管上一节__getitem__是有效的,但它是迭代退而求其次的方法。Python所有的迭代环境会有优先尝试__iter__的方法,再尝试__getitem__。

    从技术角度上讲,迭代环境是通过iter去尝试寻找__iter__方法来实现,而这种方法返回一个迭代器对象。如果已经提供了,python会重复调用迭代器对象的next()方法,直到发生StopIteration异常。如果没有找到__iter__,python会使用__getitem__机制。

    __getattr__和__setattr__捕捉属性的的引用

    __getattr__拦截属性.运算符

    __repr__和__str__会返回字符串表达形式

    __radd__处理右侧加法

    __call__拦截调用

    当实例调用时,使用__call__方法

    __del__是析构器

    当实例创建时,就会调用__init__构造方法。当实例空间被收回时,析构函数__del__就会自动执行。

  • 相关阅读:
    IOS 修改UIAlertController的按钮标题的字体颜色,字号,内容
    UITableView heightForHeaderInSection遇到的坑
    .19-浅析webpack源码之compile流程-rules参数处理(2)
    .18-浅析webpack源码之compile流程-rules参数处理(1)
    .17-浅析webpack源码之compile流程-入口函数run
    .16-浅析webpack源码之编译后流程梳理
    .15-浅析webpack源码之WebpackOptionsApply模块-plugin事件流总览
    .14-浅析webpack源码之Watchpack模块
    .13-浅析webpack源码之WatcherManager模块
    .12-浅析webpack源码之NodeWatchFileSystem模块总览
  • 原文地址:https://www.cnblogs.com/hotbaby/p/4913363.html
Copyright © 2020-2023  润新知