iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >解决Python运算符重载的问题
  • 414
分享到

解决Python运算符重载的问题

Python运算符重载 2022-06-02 22:06:11 414人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

python进行有理数运算时,希望用运算符(+ - * /)描述计算过程。 只是用来写出更加自然的计算表达式。为此,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)**运算符表示幂乘

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 解决Python运算符重载的问题

本文链接: https://www.lsjlt.com/news/10788.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作