【发布时间】:2014-08-21 16:31:03
【问题描述】:
我正在构建一个用于处理非常具体的结构化数据的库,并且我正在 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 类(如
CTmatrix.sort())上使用 DataFrame 方法,而无需通过选项 #2 中封装的_data对象上的方法来支持它们 - Pandas 中的更新和新方法是继承的,但可能被本地类方法覆盖的方法除外
但是
- 与
__init__()等某些方法的复杂性以及必须将属性传递给超类super(MyDF, self).__init__(*args, **kw)
选项 2:
- 对类及其行为的更多控制
- 可能对 Pandas 中的更新更具弹性?
但是
- 必须使用 getter() 或非隐藏属性才能像数据框一样使用对象,例如 (
CTMatrix.data.sort())
采用选项 #1 中的方法是否还有其他缺点?
【问题讨论】:
标签: python oop inheritance pandas