我有办法实现 rmul ,以便它可以在两个方向上运行吗? 我正在使用 mul 将元素R3中的两个向量a和b相乘。后来我希望能够将每个元素乘以一个带有2 * a和a * 2等运算符的数字。
class R3(object):
def __init__(self,an_array):
self.a = an_array # of length 3
self.s = 3
def __mul__(self,that):
tmp = [0]*self.s
for i in range(self.s):
tmp[i] = self.a[i]*that.a[i]
return self.__class__(tmp)
def __rmul__(self,that):
tmp = [0]*self.s
for i in range(self.s):
tmp[i] = self.a[i]*that
return self.__class__(tmp)
所以这适用于* b,b * a,2 * a,但不是* 2!
答案 0 :(得分:3)
您无法为双方实施__rmul__
,因为根据定义,__rmul__
是正确的乘法。如果要更改x * y
的行为,则必须查看x.__class__.__mul__
或y.__class__.__rmul__
。
a * b
使用R3.__mul__
(确定)b * a
也使用R3.__mul__
(确定)2 * a
首先使用int.__mul__
,失败,然后尝试R3.__rmul__
代替(确定)a * 2
使用R3.__mul__
,失败,使用int.__rmul__
,再次失败(不行!)当前编写它的方式,__mul__
假设that
参数是R3
实例,__rmul__
假设that
参数是标量。
您无法修改int.__rmul__
,以更改最后一种情况的行为,因为您无法修补这些内置类型。但是,您可以修改R3.__mul__
以更改该行为。
您已实施__mul__
仅处理传递到R3
的{{1}}个实例。修复它以便它可以处理传递到that
的标量。
答案 1 :(得分:0)
<command id="..." name="Undo"></command>