前言:
而今大家对“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自增运算符