Python,我如何定义一个对象 O 使得 func(O) = func(O.val) 对于任何 func

标签 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__ 方法(​​也可能是其他方法),还有 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/

相关文章:

python - 如何将大型数据集加载到 gensim word2vec 模型

python - 如何在 Python 中执行代码字符串?

python - 将字符串转换为日期时间 pandas

PHP链式方法,如何知道哪一个是最后一个

perl - 通过 "->"调用方法与传递类/对象作为第一个参数之间到底有什么区别?

python - 在 matplotlib 中绘制单元格平均值而不是线图

python - while循环不会停止

python - 类的用法&&继承: am I doing wrong?

c# - 使用 Windows.Storage 命名空间时出错

javascript - OOP 方法中是否可以知道 ajax 调用何时完成