Jér*_*tin 18 python overriding class operator-overloading operator-keyword
我有一个矢量类,我定义了__mul__
将矢量乘以数字的方法.
这是__mul__
方法:
def __mul__(self, other):
x = self.x * other
y = self.y * other
new = Vector()
new.set_pos((x, y))
return new
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道数字和矢量之间是哪个.如果self是数字,则self.x会引发错误.(我可能会误解这一点:"其他"总是一个数字吗?)
__rmul__ = __mul__
Run Code Online (Sandbox Code Playgroud)
但是我怎么能在课程定义中这样做呢?
就像是 :
def __rmul__ = __mul__
Run Code Online (Sandbox Code Playgroud)
kin*_*all 22
self
永远不会是数字,__mul__()
因为方法附加的对象不是数字,它是向量,根据定义,它是被乘数.
other
如果您的对象乘以数字,则为数字.或者它可能是其他东西,例如另一个矢量,你可以测试和处理.
当您的对象是乘数时,__rmul__()
如果被乘数不知道如何处理该操作,则调用该对象.
要处理其中__mul__
并且__rmul__
应该是相同方法的情况,因为操作是可交换的,所以您可以在类定义中执行赋值.
class Vector(object):
def __mul__(self, other):
pass
__rmul__ = __mul__
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 11
只需将其列为属性:
__rmul__ = __mul__
Run Code Online (Sandbox Code Playgroud)
这与在模块中创建函数别名的方式相同; 在类体中创建方法的别名也是一样的.
归档时间: |
|
查看次数: |
10673 次 |
最近记录: |