You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:15:04