美文网首页
chapter13 运算符重载

chapter13 运算符重载

作者: F4A3 | 来源:发表于2017-11-22 16:51 被阅读0次

python中的运算符重载

  • 不能重载内置类型的运算符
  • 不能新建运算符,只能重载现有的
  • is, and, or 和not 不能重载(位运算符可以)

一元运算符

  • - (__neg__): 一元取符
  • + (__pos__): 一元取正
  • ~ (__invert__): 对整数按位取反, ~x == -(x+1).
    如果x是2,那么~x==-3。
  • abs() (__abs__): 绝对值
    实现一元运算符只需要实现这些特殊方法。它们只有一个参数,self。但是,要始终返回一个新对象。多数时候 +最好返回self的副本。
扩展

x != +x的案例。一个在decimal.Decimal.一个在collections.Counter

重载加法运算符 +

使用itertools.zip_longest()函数来对向量实例进行值的加法运算。

def __add__(self,other):
    pairs = itertools.zip_longest(self, other. fillvalue=0.0)
    return Vector(a + b for a, b in pairs)

注意:实现一元运算符跟中缀运算符的特殊方法一定不能修改操作数。即不能修改self。只有增量赋值表达式可能会修改self。
还需要实现__radd__(self,other)方法.这个方法可以看做是__add__的反向.(右向操作).
原因: python执行a+b时.先在a对象中找相应的__add__方法. 抛出NotImplemented异常后在b中寻找__radd__方法.

重载标量乘法运算符 *

使用白鹅类型。检查numbers.Real抽象基类。

python3.5 中新添加的@运算符。

@中缀运算符:__matmul__

众多比较运算符

处理与中缀运算符大体相似.在两方面有重大区别.

  • 正向和反向调用使用的是同一系列方法.
    1. ==来说:正向跟反向都调用__eq__方法
    2. 正向的__gt__方法调用的是反向的__lt__方法.
  • 对于==!=来说.反向调用失败不会抛出TypeError.而是比较对象的ID.
    image.png

增量赋值运算符

  • 增量赋值不会修改不可变目标,而是新建实例,然后重新绑定
  • 如果没有实现__iadd__ 增量赋值运算只是个语法糖。a += b 就是 a = a + b。
  • 然后,如果实现了就地运算符方法,计算a += b的结果就会调用就地运算符方法。会修改左操作数,而不是新建对象。

相关文章

  • chapter13 运算符重载

    python中的运算符重载 不能重载内置类型的运算符 不能新建运算符,只能重载现有的 is, and, or 和n...

  • 运算符重载及其他约定

    7.1 重载算术运算符 重载二元算术运算符 重载复合赋值运算符 重载一元运算符 重载比较运算符 等号运算符:‘eq...

  • C++ 部分运算符重载

    可重载的运算符 不可重载的运算符和符号 重载运算符为类的成员函数 重载运算符为友元函数 重载赋值运算符 重载流插入...

  • 2019-07-11 运算符的重载

    运算符的重载 重载运算符 (“::”,“.*”,“.”,“?:”)不能被重载。 重载运算符时,不能改变其本质,如不...

  • 运算符重载

    一.+号运算符重载 二.<<号运算符重载 三.指针运算符重载(智能指针)

  • C++运算符重载-下篇 (Boolan)

    C++运算符重载-下篇 (Boolan) 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符...

  • C++运算符重载-上篇 (Boolan)

    C++运算符重载-上篇 (Boolan) 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符...

  • C++重载

    重载 C++语言规定: 重载的运算符要保持原运算符的意义。只能对已有的运算符重载,不能增加新的运算符。重载的运算符...

  • C++运算符重载详解

    运算符重载规则 1.被重载的运算符必须是已经存在的C++运算符,不能重载自己创建的运算符; 2.运算符被重载之后,...

  • 第十一章 使用类

    运算符重载 运算符重载是一种形式的C++多态。运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。...

网友评论

      本文标题:chapter13 运算符重载

      本文链接:https://www.haomeiwen.com/subject/wtxovxtx.html