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

Python自定义类如何支持无前缀操作数的+/-一元运算符?

结论

你对+x的调用逻辑认知存在错误,__add__/__radd__是处理二元加法运算(即a + b格式,存在左右两个操作数)的魔法方法,前缀无操作数的+/-属于一元运算符,对应独立的魔法方法,不会被转译为x + 0/x - 0的二元运算逻辑。


对应魔法方法说明

一元正负运算符对应两个专属魔法方法:

  • __pos__:响应+x操作,通常返回与原对象值一致的新实例
  • __neg__:响应-x操作,返回值取反后的新实例

修正代码示例

你只需要在Interval类中补充实现上述两个方法即可:

class Interval:
    def __init__(self, mini, maxi):
        self.mini = mini
        self.maxi = maxi
    # 原有__add__、__radd__方法保留,此处省略
    # 注意:你原有__add__中的判断 `other == 0 or None` 存在逻辑错误,等价于 `other ==0 or False`,永远无法命中None的情况,需改为 `other == 0 or other is None`
    
    # 实现一元+运算符
    def __pos__(self):
        return Interval(self.mini, self.maxi)
    
    # 实现一元-运算符,注意区间取反后上下限顺序会翻转
    def __neg__(self):
        return Interval(-self.maxi, -self.mini)
    
    # 补充打印方法方便输出查看
    def __repr__(self):
        return f"Interval({self.mini}, {self.maxi})"

if __name__ == '__main__':
    x = Interval(2.5,3.0)
    print(+x) # 输出:Interval(2.5, 3.0)
    print(-x) # 输出:Interval(-3.0, -2.5)

内容的提问来源于stack exchange,提问作者newbiecoder11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:45:03