首页 > 解决方案 > 如何使python类能够加法或乘法,前面有数字?

问题描述

我知道有一种方法可以使类与这些数学运算符兼容,后面有数字:

class Sth:
    def __init__(self):
        self.val = 1
    def __add__(self, digit):
        self.val += digit
        return self

那么像这样的代码sth = Sth() * 2.8是合法的。

但是如何使代码sth = 2.8 * Sth()合法呢?

(我这样做是因为在我使用的第三方函数中有很多数字提前操作。我想将我自己的实例传递给他们。)

标签: python

解决方案


您可以调用r双下方法的版本来反转操作数

class Sth:
    def __init__(self):
        self.val = 1
    def __add__(self, digit):
        self.val += digit
        return self
    def __radd__(self, digit):
        return self.__add__(digit)

这将支持

sth = Sth() + 2.8  # __add__
sth = 2.8 + Sth()  # __radd__

你可以做同样的事情__mul____rmul__但要注意你的类是否应该允许这些运算符是可交换的,否则请确保每个实现在这些情况下都做正确的事情。


推荐阅读