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

527 0
Honkers 2026-2-24 05:58:30 来自手机 | 显示全部楼层 |阅读模式

本例中未完整实现数字类型的全部计算运算符,实现全部数学运算符后即可作为鸭子类型在Python中当做普通数字进行计算。

如果只是临时计算,使用类中的 self.value 参数也可参与计算。

实现原理:

其中 self.add 用于记录数字被使用的求正/求负运算符的状态。当已被同类型运算符操作过一次后,第二次使用运算符时产生自增/自减效果。

需注意使用一次求负运算符后除了要记录运算符状态,还要产生负数效果,连续第二次使用求负运算符后清除负号状态,同时自减一。

实现代码:

  1. class MyInt:
  2. def __init__(self, value, add=0):
  3. self.add = add
  4. self.value = value
  5. def __pos__(self):
  6. add = self.add == 1
  7. return MyInt(self.value + add, 1 - add)
  8. def __neg__(self):
  9. add = self.add == -1
  10. return MyInt(-self.value - add, add - 1)
  11. def __repr__(self):
  12. return str(self.value)
  13. def __eq__(self, other):
  14. return self.value == other
复制代码

以及测试代码:

  1. i = MyInt(1)
  2. print('\n测试原本数据:')
  3. print(f'{i = }') # 1
  4. print('\n测试求正、自增、自增后求正、连续自增:')
  5. print(f'{+i = }') # 1
  6. print(f'{++i = }') # 2
  7. print(f'{+++i = }') # 2
  8. print(f'{++++i = }') # 3
  9. print('\n测试求负、自减、自减后求负、连续自减:')
  10. print(f'{-i = }') # -1
  11. print(f'{--i = }') # 0
  12. print(f'{---i = }') # 0
  13. print(f'{----i = }') # -1
  14. print(f'{-----i = }') # 1
  15. print(f'{------i = }') # -2
  16. print('\n测试混合使用求正、求负、自增、自减:')
  17. print(f'{+-i = }') # -1
  18. print(f'{-+i = }') # -1
  19. print(f'{+-+-i = }') # 1
  20. print(f'{-+-+i = }') # 1
  21. print(f'{++--i = }') # 1
  22. print(f'{--++i = }') # 1
  23. print(f'{+--+i = }') # 0
  24. print(f'{-++-i = }') # 0
复制代码

需要注意的是,++i 没有实现「自」增的效果,也就是数据 i 没有原地修改。

因为在Python中 ++i 和 (+(+i)) 是完全等效的操作,然而在C语言中这两种‮的算计‬方法‮果结‬是不同的。

本质原因是在C语言中这是2个运算符,而在Python中是1‮运个‬算符。所以这是无法解决的问题。

以及 i++ 和 i-- 这样的后置运算符,那就更没有办法实现啦。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行