商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 奇淫巧技 | 使用Python支持++、--运算符

奇淫巧技 | 使用Python支持++、--运算符

  发布于2026-07-20 阅读(0)

扫一扫,手机访问

这个例子并没有完整实现数字类型的所有计算运算符,不过思路很清晰——一旦补齐全部数学运算符,这个自定义类就能像鸭子类型一样,在Python中当作普通数字参与计算。当然,如果只是临时用一下,直接调用类里的 self.value 参数也能凑合着算。

实现原理

关键点在于 self.add 这个属性,它用来记录当前数字被求正(+)或求负(-)运算符操作的状态。当同一个运算符被连续使用两次时,会产生自增或自减的效果。具体来说:

  • 第一次使用求负运算符,除了要记录状态,还得真正产生负数效果。
  • 连续第二次使用求负运算符,则清除负号状态,同时数值自减一。

来看实现代码:

class MyInt:
    def __init__(self, value, add=0):
        self.add = add
        self.value = value

    def __pos__(self):
        add = self.add == 1
        return MyInt(self.value + add, 1 - add)

    def __neg__(self):
        add = self.add == -1
        return MyInt(-self.value - add, add - 1)

    def __repr__(self):
        return str(self.value)

    def __eq__(self, other):
        return self.value == other

附带一套测试代码,看看实际效果:

i = MyInt(1)
print('\n测试原本数据:')
print(f'{i = }')  # 1

print('\n测试求正、自增、自增后求正、连续自增:')
print(f'{+i = }')   # 1
print(f'{++i = }')  # 2
print(f'{+++i = }') # 2
print(f'{++++i = }')# 3

print('\n测试求负、自减、自减后求负、连续自减:')
print(f'{-i = }')     # -1
print(f'{--i = }')    # 0
print(f'{---i = }')   # 0
print(f'{----i = }')  # -1
print(f'{-----i = }') # 1
print(f'{------i = }')# -2

print('\n测试混合使用求正、求负、自增、自减:')
print(f'{+-i = }')     # -1
print(f'{-+i = }')     # -1
print(f'{+-+-i = }')   # 1
print(f'{-+-+i = }')   # 1
print(f'{++--i = }')   # 1
print(f'{--++i = }')   # 1
print(f'{+--+i = }')   # 0
print(f'{-++-i = }')   # 0

这里需要特别说明一点:++i 并没有实现真正的“自增”效果——原始变量 i 的值并没有被原地修改。因为 Python 中的 ++i 完全等价于 (+(+i)),而 C 语言里这两个写法是不同运算符的结果。本质原因在于:C 语言中 ++ 是两个运算符(前置自增、后置自增),而 Python 中 + 只是一个一元运算符,连续写两个 + 只是重复调用同一个方法。所以这个差异是语言层面无法弥合的。

至于 i++i-- 这类后置运算符,在 Python 中就更没有对应的实现方式了。

本文转载于:https://blog.csdn.net/weixin_39804265/article/details/154475225 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注