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

Python类中可为$等特殊字符绑定自定义运算吗?numpy的@如何实现?

问题解答

1. 能不能为$这类非常规特殊字符绑定自定义运算方法?

不能直接实现。Python的可重载运算符是官方预先定义好的固定集合,$不在支持重载的运算符范围内,因此无法像+、-这类内置运算符一样直接给$绑定自定义类的运算逻辑。

如果你需要实现类似的自定义二元运算,可以选择两种替代方案:

  • 复用现有不常用的可重载运算符,比如%、^等,绑定对应的魔术方法实现需求。以你提到的Fraction类为例,用%替代$的示例代码如下:
class Fraction:
    def __init__(self, numerator, denominator):
        self.value = numerator / denominator
    
    def __add__(self, other):
        # 原有相加逻辑,返回值为1的Fraction实例
        return Fraction(int(self.value + other.value), 1)
    
    # 绑定%运算符的魔术方法
    def __mod__(self, other):
        sum_frac = self + other
        return sum_frac.value + 30

# 测试效果
a = Fraction(1,2)
b = Fraction(1,2)
print(a % b) # 输出结果为31
  • 直接定义普通实例方法,调用时用a.custom_op(b)的形式实现对应逻辑。

2. numpy实现@运算符绑定的逻辑

@是Python 3.5版本官方新增的矩阵乘法专用运算符,本身属于Python支持重载的内置运算符,对应的魔术方法为__matmul__(正向运算)、__rmatmul__(反向运算)、__imatmul__(原地运算)。
numpy就是在ndarray类中实现了__matmul__魔术方法,当你执行a@b时,Python解释器会自动调用a.__matmul__(b),numpy在该方法内部调用了matmul的实现逻辑,就完成了运算符和功能的绑定。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:27:02