Python实现阿拉伯数字加上中文数字

发表时间:2020-02-28


在Python 3里面,中文是可以作为变量名的,而运算符又可以重载,基于这两个特性,我们可以实现阿拉伯数字与中文数字的四则运算。

首先我们定义一个类 Num :

class Num(object):

def __init__(self, n):

self.n = n


def __repr__(self):

return self.n


def __str__(self):

return str(self.n)

然后把这个类初始化为各个中文数字:

一 = Num(1)

五 = Num(5)

八 = Num(8)

运行效果如下图所示:

代码里面,通过实现 __repr__ ,能实现在Jupyter或者Python命令行交互环境里面输入变量名回车就显示变量的值。

通过实现 __str__ ,能实现在Python 里面 print (变量) 的时候打印出具体的值。

但现在还不够,当我们进行四则运算的时候,会报错:

为了能够正常实现 一 + 1 ,我们需要实现 __add__ 方法:

class Num(object):

def __init__(self, n):

self.n = n


def __repr__(self):

return str(self.n)


def __str__(self):

return str(self.n)


def __add__(self, x):

return self.n + x

运行效果如下图所示:

但是,如果我们把加号两侧的数字兑换一下,代码又报错了,如下图所示:

这是由于,当我们执行 a + b 的时候,Python会调用 a 对象里面的 __add__ 方法,所以当我们执行 一 + 1 的时候,调用的是 里面的 __add__ 方法,这是我们自己写的,所以能够正常运行。

但是当我们执行 1 + 一 的时候,调用的是 1 里面的 __add__ 方法。在Python里面,数字对象里面的 __add__ 方法只能实现数字加数字。

但是我们不能修改Python 内置数字的 __add__ 方法,所以我们需要使用 __radd__ 方法。它的作用是,在 1 + 一 执行的时候,如果 1 里面的 __add__ 运行失败了,那么就会调用 里面的 __radd__

class Num(object):

def __init__(self, n):

self.n = n


def __repr__(self):

return str(self.n)


def __str__(self):

return str(self.n)


def __add__(self, x):

return self.n + x


def __radd__(self, x):

return self.n + x

运行效果如下图所示:

同样的原理,你可以自己实现减法 __sub__ / __rsub__ 、乘法 __mul__ / __rmul__ 和除法 __truediv__ / __rtruediv__


文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free