解决Python运算符重载的问题

 更新时间:2021年05月26日 10:54:38   作者:student_mei  
这篇文章主要介绍了解决Python运算符重载的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

python进行有理数运算时,希望用运算符(+ - * /)描述计算过程。

只是用来写出更加自然的计算表达式。为此,python为所有算数运算符规定了特殊方法名。其中所有特殊的名字都以两个下划线开始,并以两个下划线结束,即:

当在Python中输入“a+b”时,程序发现使用了“+”运算符,因此就会调用“__add__”方法。

此时,若对自定义类中进行运算符的重载,则可以实现对类的打印、有理数运算等等。

其中,一个问题应当注意,如以下代码

class Size:
    def __init__(self, value):
        self._value = value
    def value(self):
        return self._value
    def __lt__(self, another):      #由于 < 是一个二元运算符,因此会有 anothoer这一项的存在
        cc = self.value() > another.value()
        return self.value() > another.value()
 
    # def __gt__(self, another):
    #     gg = self._value < another.value()
    #     return self._value < another.value()
 
    def __eq__(self, another):
        return self.value() == another.value()
    def __str__(self):
        return str(self.value())
a=Size(3)
b=Size(2)
print(a,b,a>b)

进行调试时,尽管没有对“>”运算符(对应的魔法方法是“__gt”)进行重载,但是运算到

print(a,b,a>b)

时,程序并不会报错,且仍然会调用重载后的"__lt__"。我个人理解是因为Python自动将“a>b”看成是“b<a”。若此时重载了“__gt__”,则程序不会去调用“__lt__”了。

补充:python中的运算符与表达式

Python是面向对象的编程语言,在Python中一切都是对象。对象由数据和行为两部分组成,而行为主要通过方法来实现,通过一些特殊方法的重写,可以实现运算符重载。

运算符也是表现对象行为的一种形式,不同类的对象支持的运算符有所不同,同一种运算符作用于不同的对象时也可能会表现出不同的行为,这正是“多态”的体现。

在Python中,单个常量或变量可以看作最简单的表达式,使用除赋值运算符之外的其他任意运算符和函数调用连接的式子也属于表达式

运算符优先级遵循的规则为:算术运算符优先级最高,其次是位运算符、成员测试运算符、关系运算符、逻辑运算符等,算术运算符遵循“先乘除,后加减”的基本运算原则。

虽然Python运算符有一套严格的优先级规则,但是强烈建议在编写复杂表达式时使用圆括号来明确说明其中的逻辑来提高代码可读性

在这里插入图片描述

算数运算符

(1)+运算符除了用于算术加法以外,还可以用于列表、元组、字符串的连接,但不支持不同类型的对象之间相加或连接。

(2)*运算符除了表示算术乘法,还可用于列表、元组、字符串这几个序列类型与整数的乘法,表示序列元素的重复,生成新的序列对象。字典和集合不支持与整数的相乘,因为其中的元素是不允许重复的。

(3)运算符/和//在Python中分别表示算术除法和算术求整商(floor division)

(4)%运算符可以用于整数或实数的求余数运算,还可以用于字符串格式化,但是这种用法并不推荐。

(5)**运算符表示幂乘

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Django  ORM 练习题及答案

    Django ORM 练习题及答案

    这篇文章主要介绍了Django ORM 练习题及答案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 快速解决pymongo操作mongodb的时区问题

    快速解决pymongo操作mongodb的时区问题

    这篇文章主要介绍了快速解决pymongo操作mongodb的时区问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Python logging自定义字段输出及打印颜色

    Python logging自定义字段输出及打印颜色

    这篇文章主要介绍了Python logging自定义字段输出及打印颜色,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python实现双人五子棋(终端版)

    python实现双人五子棋(终端版)

    这篇文章主要为大家详细介绍了python实现终端版的双人五子棋,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 100 个 Python 小例子(练习题四)

    100 个 Python 小例子(练习题四)

    这篇文章主要给大家分享100 个 Python 小例子,前文分享了一二三,本文的四十最后一篇了,这篇就把100道python小练习全分享完了,感兴趣的小伙伴也可以去练习前几期内容,洗碗给这几篇文章给你的学习带来帮助
    2022-01-01
  • python实现WebP格式转成JPG、PNG和JPEG的方法

    python实现WebP格式转成JPG、PNG和JPEG的方法

    平时在网上搜索图片,另存为时常常遇到 WebP 格式,而非常见的 JPG、PNG、JPEG 格式,所以以此文记录一下WebP的读取和转换方法,希望对大家有所帮助,需要的朋友可以参考下
    2024-06-06
  • python列表[list]和元组(tuple)详情

    python列表[list]和元组(tuple)详情

    这篇文章主要介绍了python列表[list]和元组(tuple)详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Python的Django框架中自定义模版标签的示例

    Python的Django框架中自定义模版标签的示例

    这篇文章主要介绍了Python的Django框架中自定义模版标签的示例,标签的用处比过滤器更多,需要的朋友可以参考下
    2015-07-07
  • 在Python的Django框架中调用方法和处理无效变量

    在Python的Django框架中调用方法和处理无效变量

    这篇文章主要介绍了在Python的Django框架中调用方法和处理无效变量的方法,是Django编程中的基础操作,需要的朋友可以参考下
    2015-07-07
  • Django-silk性能测试工具安装及使用解析

    Django-silk性能测试工具安装及使用解析

    这篇文章主要介绍了Django-silk性能测试工具安装及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论