sma*_*ane 23 python built-in extend
我编写了一个用Python表示向量的类(作为练习),我在扩展内置运算符方面遇到了问题.
我__mul__为vector类定义了一个方法.问题是在表达式中x * y,解释器调用__mul__x 的方法,而不是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
Run Code Online (Sandbox Code Playgroud)
但这需要重新定义我想用于用户定义的类的每个函数.
有没有办法让内置函数正确处理?
pil*_*her 29
如果你想要不同类型的交换性,你需要实现__rmul__().如果实现的话,它会像所有__r*__()特殊方法一样被调用,否则操作会引发操作TypeError.请注意参数是交换的:
class Foo(object):
def __mul_(self, other):
''' multiply self with other, e.g. Foo() * 7 '''
def __rmul__(self, other):
''' multiply other with self, e.g. 7 * Foo() '''
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7616 次 |
| 最近记录: |