首页 > 解决方案 > 通过 __getitem__ 方法重载更改类型是否很好?

问题描述

我有一个类myclass,它的核心是一个data代表时间的列表+处理该列表的方法设施。我希望能够支持 numpy 样式的操作data

所以我考虑重载__getitem__运算符如下:

def __getitem__(self,i):
    import numpy as np
    return np.array(self.data)[i]

例如,这很容易通过以下方式处理data零时间到第一个元素的变化:

x = myclass()
print(x[:] - x[0])

在我看来它仍然很阴暗。

我想知道:这是一个足够体面的做法吗?OOP 和 OOP 设计的新手。

先感谢您。

标签: pythonoop

解决方案


您可以使用new将您的类设为 np.array。

import numpy as np
class MyClass:
    def __new__(cls, data):
        return np.array(data)


x = MyClass([1, 2, 3, 4])
print(x[:])
print(x[0])
print(x[:] - x[0])

这将是

[1 2 3 4]
1
[0 1 2 3]

推荐阅读