[英]Define method aliases in Python?
我有一個矢量類,我定義了__mul__
方法將矢量乘以數字。
這是__mul__
方法:
def __mul__(self, other):
x = self.x * other
y = self.y * other
new = Vector()
new.set_pos((x, y))
return new
我的問題是我不知道數字和矢量之間是哪個。 如果self是數字,則self.x會引發錯誤。 (我可能會誤解這一點:“其他”總是一個數字嗎?)
__rmul__ = __mul__
但是我怎么能在課程定義中這樣做呢?
就像是 :
def __rmul__ = __mul__
self
永遠不會是__mul__()
的數字,因為方法所附加的對象不是數字,它是向量,根據定義它是被乘數。
如果您的對象乘以數字,則other
將是一個數字。 或者它可能是其他東西,例如另一個矢量,你可以測試和處理。
當您的對象是乘數時,如果被乘數不知道如何處理該操作,則調用__rmul__()
。
要處理__mul__
和__rmul__
應該是相同方法的情況,因為操作是可交換的,您可以在類定義中進行賦值。
class Vector(object):
def __mul__(self, other):
pass
__rmul__ = __mul__
只需將其列為屬性:
__rmul__ = __mul__
這與在模塊中創建函數別名的方式相同; 在類體中創建方法的別名也是一樣的。
關鍵是在Python中,您可以告訴對象如何通過事物來增加自己。 這意味着
a * b
可能意味着“告訴a
將自己乘以b
”或“告訴b
將自己乘以a
”。 在代碼中,轉換為
a.__mul__(b)
要么
b.__rmul__(a)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.