3

感觉很简单,但我似乎找不到我需要的信息。假设我定义了一个类矩阵:

class Matrix():
    def __mul__(self, other):
    if isinstance(other, Matrix):
        #Matrix multiplication.
    if isinstance(other, int): #or float, or whatever
        #Matrix multiplied cell by cell.

如果我将一个矩阵乘以一个 int,这可以正常工作,但由于 int 不知道如何处理矩阵,因此 3*Matrix 会引发 TypeError。我该如何处理?

4

2 回答 2

4

定义__rmul__覆盖int()'__mul__方法的调用:

class Matrix():
    # code

    def __rmul__(self, other):
        #define right multiplication here.

        #As Ignacio said, this is the ideal
        #place to define matrix-matrix multiplication as __rmul__() will
        #override __mul__().

    # code

请注意,您可以使用所有数字运算符来执行此操作

另请注意,最好使用新样式类,因此将您的类定义为:

class Matrix(object):

这将允许您执行以下操作:

if type(other) == Matrix: ...
于 2012-06-01T18:27:27.827 回答
1

也定义__rmul__()方法。

于 2012-06-01T18:27:14.023 回答