如何在Python中自定义算术运算符以实现两个变量间的指定运算
Python自定义运算符实现方案
Python原生语法不支持直接定义如a 'my own operator' b这种完全自定义字符串标识的中缀运算符,但可以通过以下两种常用方案实现类似需求:
- 方案1:重载现有运算符的魔术方法
如果可以接受使用Python已有运算符符号(如+、-、@、%等),可以通过给自定义类实现对应的魔术方法来修改运算符的执行逻辑,示例如下:
class MyNum: def __init__(self, val): self.val = val # 重载加号,自定义加法逻辑:返回两数平方和 def __add__(self, other): return MyNum(self.val **2 + other.val **2) a = MyNum(2) b = MyNum(5) print((a + b).val) # 输出 2² + 5² = 29
- 方案2:用装饰器模拟自定义名称的中缀运算符
如果需要使用自定义名称标识专属运算逻辑,可以通过轻量的装饰器类实现接近你要求的调用效果,示例如下:
# 实现中缀运算符装饰器 class Infix: def __init__(self, func): self.func = func def __ror__(self, left_val): return Infix(lambda right_val, self=self, left_val=left_val: self.func(left_val, right_val)) def __or__(self, right_val): return self.func(right_val) # 定义你自己的专属运算逻辑 @Infix def my_own_operator(a, b): # 此处可自定义任意运算规则,示例为a的3倍加b的2倍 return a *3 + b *2 a, b = 2, 5 # 调用方式:用|将自定义运算符包裹在两个操作数中间即可 result = a |my_own_operator| b print(result) # 输出 2*3 +5*2 = 16
其他更底层的实现方式比如修改Python语法解析规则、使用第三方语法扩展库等,存在兼容性差、维护成本高的问题,非特殊场景不推荐使用。
内容的提问来源于stack exchange,提问作者Florian
相关产品推荐
相关产品推荐

