2
根據關於arithmetic special methods(運算符重載)的Cython文檔,它們的實現方式,我不能依靠self
作爲其特殊方法被調用的對象。Cython中的高效算法特殊方法
顯然,這有兩個後果:
- 我不能指定在方法聲明靜態類型。例如,如果我有一個類
Foo
,它只能乘以int
,那麼我不能有def __mul__(self, int op)
而沒有看到TypeError
(有時)。 - 爲了決定做什麼,我必須檢查操作數的類型,推測使用
isinstance()
來處理子類,這在操作符中似乎非常昂貴。
有沒有什麼好的方法來處理這個問題,同時保留操作符語法的便利性?將我的類切換到Cython擴展類型的全部原因是爲了提高效率,但是由於它們嚴重依賴於算術方法,所以基於上述情況,我似乎實際上會讓它們變得更糟。
你是對的,我正在考慮去那條路線,但它當然不保留操作符語法的**完全**方便。 – ezod 2012-03-09 16:34:28