我如何定义一个对象,以便作用于它的任何函数都作用于它的一个字段?这可能吗?
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__ 方法(也可能是其他方法),还有 list/str/... 这应该只适用于某些情况。例如,如果我有一个 pd 时间序列,其值本身是时间序列或列表或其他非标准类型,那么我想要修改后的打印。
最佳答案
一般来说,你不能。您需要支持类(class)中的每个所需功能。例如,要支持添加 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
与其他数据类型一起工作可能需要实现的所有函数的列表。
关于Python,我如何定义一个对象 O 使得 func(O) = func(O.val) 对于任何 func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25688033/