龙空技术网

Python | 定义运算符

VT聊球 164

前言:

而今大家对“python自增运算符”大概比较看重,各位老铁们都需要了解一些“python自增运算符”的相关资讯。那么小编在网上网罗了一些有关“python自增运算符””的相关资讯,希望大家能喜欢,大家一起来学习一下吧!

定义运算符

以加法运算符 “ + ” 为例,不仅仅用于数字,还可以用于序列,比如:

>>> 2 + 35>>> 'python' + "book"'pythonbook'

如果考察能够用于 “ + ” 的对象,会发现它们都必须有 __add__() 方法,否则(如下操作中的字典类型)就不能实现 “ + ” 运算。

>>> hasattr(2, "__add__")True>>> hasattr("python", "__add__")True>>> hasattr(list, "__add__")True>>> hasattr(dict, "__add__")False>>> {1:2} + {3:4}Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: unsupported operand type(s) for +: 'dict' and 'dict'

所以,在自定义的对象类型中,如果也重写了 __add__() 方法,就会按照指定规则进行 + 运算。

在9.1.2节创建的 fraction.py 已有代码基础上,可以继续对分数问题进行研究,考虑分数相加,以此说明 __add__() 方法的编写和应用。

先复习一下分数加法的计算过程(以 为例):

(1)通分,即分母为原来两个分数的分母的最小公倍数,得到 。

(2)分子相加,得到上述两个分数的和。

据此可知,计算分数加法的关键点是“通分”,而通分的关键是找出两个整数的最小公倍数。

如何找最小公倍数?步骤如下:

(1)计算两个数的最大公约数,假设 a 和 b 两个整数,最大公约数(Greatest Common Divisor)用 gcd(a, b) 表示。

(2)最小公倍数和最大公约数的关系是:lcm(a, b) = |ab| / gcd(a, b) ,lcm(a, b) 表示这两个数的最小公倍数(Lowest Common Multiple)。

按照上面所列的方法,增加计算最大公约数和最小公倍数的静态方法——请读者思考,为什么要用静态方法?然后重写特殊方法 __add__() ,即实现了分数加法。详细代码示例如下:

#coding=utf-8'''filename: fraction.py'''class Fraction:    def __init__(self, number, denom=1):        self.number = number        self.denom = denom     def __str__(self):        return str(self.number) + '/' + str(self.denom)     __repr__ = __str__    @staticmethod    def gcd(a, b):        if not a > b:            a, b = b, a        while b != 0:            remainder = a % b            a, b = b, remainder        return a    @staticmethod    def lcm(a, b):        return (a * b) / Fraction.gcd(a, b)    def __add__(self, other):        lcm_num = Fraction.lcm(self.denom, other.denom)        number_sum = (lcm_num / self.denom * self.number) \                     + (lcm_num / other.denom * other.number)        return Fraction(number_sum, lcm_num)if __name__ == "__main__":    m = Fraction(1, 3)    n = Fraction(1, 2)    print(m + n)

以上代码内容不再解释,留给读者对其进行注释,以便练习解读代码的能力——其中各个方法的基本原理参阅之前所学内容。

除了加法运算符之外,其他运算符也都有相应的特殊方法,如有必要,可以在类中重写这些特殊方法,以实现有关计算。表9-1-1中列出了几种常见运算符所对应的特殊方法,供读者参考。

运算符和方法名称

标签: #python自增运算符