如何定义一个对象,使任何作用于它的函数都会作用于其中一个字段?这可能吗?
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时间序列,其值本身就是时间序列或列表或其他非标准类型,那么我想要修改后的打印。
答案 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
类型的子类中)。