我正在构建一个用于处理非常具体的结构化数据的库,并且我正在 Pandas 之上构建我的基础设施。目前,我正在为不同的用例编写一堆不同的数据容器,例如用于 Country x Time Data 的 CTMatrix 等,以容纳适用于所有 CountryxTime 结构化数据的方法。
我目前正在辩论
选项 1:对象继承
class CTMatrix(pd.DataFrame):
methods etc. here
或 选项 2:对象使用
class CTMatrix(object):
_data = pd.DataFrame
then use getter, setter methods to control access to _data etc.
从软件工程的角度来看,这里有明显的选择吗?
到目前为止,我的想法是:
选项 1:
CTmatrix.sort()
)上使用 DataFrame 方法,而不必通过封装的 _data
上的方法支持它们选项 #2 中的对象 但
__init__()
并且必须将属性传递给父类(super class) super(MyDF, self).__init__(*args, **kw)
选项 2:
但
CTMatrix.data.sort()
) 采用选项 #1 中的方法是否还有其他缺点?
最佳答案
我会避免子类化 DataFrame
,因为很多DataFrame
方法将返回一个新的 DataFrame
而不是您的 CTMatrix
的另一个实例目的。
GitHub 上有一些围绕此问题的未解决问题,例如:
更一般地说,这是一个组合与继承的问题。我会特别警惕利益#2。现在看起来可能很棒,但除非您密切关注 Pandas 的更新(而且它是一个快速移动的目标),否则很容易导致意外后果,并且您的代码最终会与 Pandas 交织在一起。
关于python - Pandas DataFrame 对象继承还是对象使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32576094/