2011-07-31 51 views
17

Vì vậy, tôi có một lớp tùy chỉnh có chức năng __mul__ hoạt động với int. Tuy nhiên, trong chương trình của tôi (trong thư viện), nó được gọi theo cách khác, ví dụ: 2 * x trong đó x thuộc lớp của tôi. Có cách nào tôi có thể có nó sử dụng chức năng __mul__ của tôi cho điều này?Python: ghi đè phép nhân

Trả lời

23

Chỉ cần thêm dòng sau vào định nghĩa lớp và bạn sẽ được tốt để đi:

__rmul__ = __mul__ 
+0

Lưu ý rằng điều này không phải lúc nào cũng như những gì bạn muốn. Giả sử bạn có các lớp vector và ma trận, và bạn muốn xác định phép nhân giữa chúng bằng cách xử lý vectơ như ma trận 1xN. Phép nhân ma trận không giao hoán, vì vậy bạn cần phải chuyển đổi thứ tự các đối số. –

16

Thực hiện __rmul__ là tốt.

class Foo(object): 
    def __mul__(self, other): 
     print '__mul__' 
     return other 
    def __rmul__(self, other): 
     print '__rmul__' 
     return other 

x = Foo() 
2 * x # __rmul__ 
x * 2 # __mul__