一日一技:在Python中实现阿拉伯数字加上中文数字

简介: 一日一技:在Python中实现阿拉伯数字加上中文数字

在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__

目录
相关文章
|
2月前
|
Python
6-18|Python画字母H
6-18|Python画字母H
|
3月前
|
Python
2:Python字符串与数字
这段代码示例展示了Python中的字符串定义、字符串操作(如连接和重复)、基本算术运算以及条件判断。字符串可通过单双引号定义。字符串支持加法(连接)与乘法(重复)。数字变量支持加减乘除等运算。示例还对比了两个条件语句代码块:第一个因使用全角冒号及未闭合字符串引发语法错误;第二个则正确无误,当条件为真时将输出"我是神仙"和"我是高手"。这强调了遵循Python语法规范的重要性。
|
Python
Python大小写转换
Python大小写转换
82 0
|
6月前
|
Python
Python 中的数字到底是什么?
Python 中的数字到底是什么?
38 4
|
6月前
|
Python
Python小技巧:罗马数字转阿拉伯数字
Python小技巧:罗马数字转阿拉伯数字
|
6月前
|
Python
python \r \t \n 各种转义字符
python \r \t \n 各种转义字符
56 0
|
Python
Python|字符串中第二大的数字
Python|字符串中第二大的数字
107 1
|
存储 Python
python 星号(*) 还能这么用
python 星号(*) 还能这么用
|
数据安全/隐私保护 索引 Python
如何在 Python 中将数字转换为字母?
如何在 Python 中将数字转换为字母?
1104 0
|
Python
python中常用转义字符
python中常用转义字符
218 0
python中常用转义字符