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
相关产品推荐
相关产品推荐

