簡體   English   中英

在Python中定義方法別名?

[英]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會引發錯誤。 (我可能會誤解這一點:“其他”總是一個數字嗎?)

所以我在這里找到: Python:我可以做的乘法覆蓋

__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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM