Python 运算符重载

https://www.cnblogs.com/hotbaby/p/4913363.htmlPython 运算符重载构造函数与表达式: __init__, __sub__

常见运算符重载方法methodoverloadcall__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__就会自动执行。

(0)

相关推荐

  • 流畅的Python 1. Python数据模型(特殊方法 __func__())

    文章目录 1. `__getitem__().__len__()` 方法 2. 特殊方法 1. __getitem__().__len__() 方法 举一个扑克牌的例子 import collecti ...

  • Python进阶系列:Python遍历的秘密

    前言 可迭代对象,迭代器,生成器,相信许多学习Python的小伙伴或多或少都听说过,但你真的知道他们的区别吗?真的知道为什么需要这些概念吗? 本文带你深入了解一系列相关机制,不仅告诉你概念,还告诉你为 ...

  • 《C++ Primer》笔记 第10章 泛型算法

    迭代器令算法不依赖于容器,但算法依赖于元素类型的操作. 算法永远不会执行容器的操作.算法永远不会改变底层容器的大小. accumulate定义在头文件numeric中,接受三个参数,前两个指出需要求和 ...

  • Python学习之迭代器和生成器有什么不同?

    迭代器和生成器区别是什么?相信很多人在初学Python的时候对它们都很好奇,接下来我们一起来看看它们的区别吧. 迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己的本身 ...

  • 《C++ Primer》笔记 第9章 顺序容器

    顺序容器类型 类型 解释 vector 可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢 deque 双端队列.支持快速随机访问.在头尾位置插入.删除速度很快 list 双向链表 ...

  • 第一次把 Python 的切片理解得如此透彻

    来源:Python猫 作者:豌豆花下猫 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slice) ...

  • Python运算符分为哪些?这几类最常见!

    说起Python运算符,相信很多人都听说过,但对它的了解并不是很多,甚至不知道它有哪些分类,接下来跟着小编一起来看看吧. Python中运算符是一种特殊的符号,用以表示数据的运算.赋值和比较等. 运算 ...

  • 关于c++的运算符重载那些事

    搞c++有一段时间了,今天突然要重载一个运算符,发现自己有点忘了,遂查查资料做一下c++运算符重载的小总结. 一.何为运算符重载 运算符的重载是c++语言特有的,java什么的是没有运算符重载的,所以 ...

  • 第四课:Python运算符大全与pycharm常用快捷键合集!

    pycharm中常用的快捷键 1.Ctrl+c复制 2.Ctrl+v粘贴 3.Ctrl+d直接将本行复制粘贴至下一行 4.Ctrl+/(?)注释(被注释的代码将无法被运行,跟被删掉差不多,但代码依然保 ...

  • Python运算符是否只有加减乘除?

    数学法中的加减乘除,是运算符,但Python的运算符更加多样和复杂,分为算术运算符.比较运算符.赋值运算符.位运算符.逻辑运算符.成员运算符.身份运算符.为更加直观地了解运算符的用法,本文采用代码与注 ...

  • Python 运算符 | 菜鸟教程

    什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 4 +5 = 9 .例子中,4 和 5 被称为操作数,"+" 称为运算符. Python语言支持以下类型的运算符 ...

  • RealPython 基础教程:Python 运算符和表达式

    " 运算是程序的基本功能,而运算符和表达式则是最基本的运算单元" 在了解了不同类型的变量之后,我们现在该用这些变量做点什么了. 今天,我们将了解如何在变量上执行计算.你最终将会掌握 ...

  • Python运算符及优先级顺序

    来自:https://www.cnblogs.com/hepeilinnow/p/9737590.htmlPython语言是一门脚本语言,支持面向对象.面向过程编程,兼具编译性和解释性的动态语言,整理 ...

  • Python运算符优先级和结合性一览表

    优先级和结合性是Python表达式中比较重要的两个概念,它们决定了先执行表达式中的哪一部分. Python运算符优先级 所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符. 例如对 ...

  • Python有哪些运算符?用法介绍!

    众所周知,编程语言的本质就是解决运算逻辑,包括Python也是如此,它可以通过各种算法实现想要的功能;当然,我们也必须搞懂各类运算符的使用,那么Python有哪些运算符呢?它的使用方法是什么?我们来看 ...