Python类中的属性作为所有数值运算的默认操作数

时间:2015-10-15 19:04:43

标签: python class

我想在Python类中定义一个属性,用于所有数值运算(__add____mul__等):

class Example:
    def __init__(self, param1, param2):
        self.oper = param1

因此,在上面的课程中,我想在所有数值运算中使用属性oper。例如,我想实现以下行为:

>>> Example(1, 2) + Example(3, 4)
4
>>> 3 * Example(2, 10)
6

为了做到这一点,我是否需要实现我想要的每个数值运算函数(__add____mul__等),或者是否有更简洁/ Pythonic的做法是什么?

这是一些上下文,如果它有帮助:这个类应该包含一些变量(即一个随机变量,如scipy.stats中的rv和一个包含一些百分位数的字典)。如果在数值运算中调用它(例如,2 + Example(3, 10)),则应该使用字典中的一个值作为操作中的操作数,预期返回float

1 个答案:

答案 0 :(得分:3)

您可以考虑将其投射到所需的类型

>>> class Example:
...     def __init__(self, param1, param2):
...         self.param1 = param1
...         self.param2 = param2
...     def __int__(self):
...         return self.param1

>>> 3 * int(Example(2,1))
6