Python,如何为任何func定义一个对象OF,使得func(TO)= func(Oval)

时间:2014-09-05 14:19:47

标签: python oop

如何定义一个对象,使任何作用于它的函数都会作用于其中一个字段?这可能吗?

class Mydata(object):
    def __init__(self, val):
        self.val = val

    def __str__(self):
        # my changes

a = Mydata(0)
a + 4 # return integer 4
print a # prints my change

b = Mydata([1,2])
b * 2 # return [1,2,1,2]
b[a] # return 1

由于

编辑:实际问题。

我想修改pandas时间序列/数据框的__repr__方法(也许还有其他方法),还要修改/ str / ...这只适用于某些情况。例如,如果我有一个pd时间序列,其值本身就是时间序列或列表或其他非标准类型,那么我想要修改后的打印。

2 个答案:

答案 0 :(得分:4)

一般情况下,你不能。您需要在课堂上支持每个所需的功能。例如,要支持添加Mydata个实例和另一个值,请定义Mydata.__add__Mydata.__radd__

# For Mydata(4) + 2
def __add__(self, other):
    return self.val + other

# For 2 + Mydata(4)
def __radd__(self, other):
    return self.val + other

我忽略了某些细节,例如确保这对other的所有(或尽可能多)类型都有用。

您必须为乘法(__mul__)等做同样的事情。请参阅documentation on Python's data model以获取可能需要实施的所有功能的列表,以使Mydata能够使用其他数据类型。

答案 1 :(得分:1)

您可以尝试继承int,如here所述,以及list等。如果由于某种原因这不适合您,我会将其合并使用class decorator(例如,以某种方式将类包装在val类型的子类中)。

相关问题