我写了一个Python类来表示向量(作为练习),但我在扩展内置运算符时遇到了问题。我为向量类定义了一个
因此,
我可以通过编写一个新的乘法函数来解决这个问题。
__mul__
方法。问题是,在表达式x * y
中,解释器调用x的__mul__
方法而不是y的方法。因此,
vector(1, 2, 3) * 2
返回向量<2, 4, 6>,就像应该做的那样;但是2 * vector(1, 2, 3)
会创建一个TypeError,因为内置int类不支持与我定义的向量相乘。我可以通过编写一个新的乘法函数来解决这个问题。
def multiply(a, b):
try:
return a * b
except TypeError:
return b * a
但这将需要重新定义我想要与我的自定义类一起使用的每个函数。
有没有一种方法可以使内置函数正确处理这个问题?
Foo.__rmul__
而不是另一个对象的__mul__
? - user166390__mul__
,如果找不到,则查找右侧的__rmul__
。 - Karl Knechtel__mul__
方法。但是,如果该方法不存在或返回NotImplemented
,则Python将调用另一个对象的__rmul__
方法来尝试进行乘法运算。(请注意,如果__mul__
引发异常,则不会调用__rmul__
方法。) - Ethan Furman