如何避免使用组合对 pandas DataFrame 进行子类化?
How do I avoid subclassing a pandas DataFrame using composition?
pandas 文档recommends against 子class 其数据结构。他们推荐的替代方法之一是使用组合,但他们只是将读者指向一篇关于组合与继承的维基百科文章。那篇文章和我发现的其他资源并没有帮助我理解如何使用组合来扩展 pandas
DataFrame
。有人可以在这种情况下解释组合,并告诉我组合可能是 sub-classing pd.DataFrame
的首选替代方案的情况吗?提供比维基百科文章更有指导意义的简单示例或 link 信息会非常有帮助。
在这个问题中,我特别想问的是,在有人可能想要 subclass pd.DataFrame
的情况下应该如何使用组合。我知道还有其他解决方案可以扩展 Python 不涉及组合的对象,我询问了 关于扩展 pandas
DataFrames
的问题,这导致了使用包装器的不同解决方案class.
我不明白“包装”和“合成”在这里指的是同一种方法,如下面 MaxYarmolinsky 的回答所述。我在上面 link 编辑的问题的 对在这种情况下使用合成进行了更完整的讨论,这可能需要处理 __getattr__
、__getitem__
和 __setitem__
正确(我意识到这对于知道自己在做什么的人来说是显而易见的,但我不得不问我之前的问题,因为我自己尝试时未能 get/set 项)。
只需谷歌搜索一下,就会向您展示如何创建一个简单的 class,正如您通过组合所描述的那样。
class mydataframe():
def __init__(self,data):
self.coredataframe = pd.DataFrame(data)
self.otherattribute = None
然后你可以添加自己的方法和属性...
在 OOP 继承模型中,组合模型“有一个”。
一般来说,除非您考虑到特定的多态设计,否则您应该选择组合而不是继承,因为它的耦合度较低且模块化程度更高。继承是您可以做的最强大的耦合。强耦合导致维护困难(万物相连,难以分离),而组合更容易重构。
如果设计不当或设计是渐进的,继承也可能导致混乱的继承层次结构。
也就是说,不要害怕将继承用于多态性。但要小心将其用于简单的代码重用。
pandas 文档recommends against 子class 其数据结构。他们推荐的替代方法之一是使用组合,但他们只是将读者指向一篇关于组合与继承的维基百科文章。那篇文章和我发现的其他资源并没有帮助我理解如何使用组合来扩展 pandas
DataFrame
。有人可以在这种情况下解释组合,并告诉我组合可能是 sub-classing pd.DataFrame
的首选替代方案的情况吗?提供比维基百科文章更有指导意义的简单示例或 link 信息会非常有帮助。
在这个问题中,我特别想问的是,在有人可能想要 subclass pd.DataFrame
的情况下应该如何使用组合。我知道还有其他解决方案可以扩展 Python 不涉及组合的对象,我询问了 pandas
DataFrames
的问题,这导致了使用包装器的不同解决方案class.
我不明白“包装”和“合成”在这里指的是同一种方法,如下面 MaxYarmolinsky 的回答所述。我在上面 link 编辑的问题的 __getattr__
、__getitem__
和 __setitem__
正确(我意识到这对于知道自己在做什么的人来说是显而易见的,但我不得不问我之前的问题,因为我自己尝试时未能 get/set 项)。
只需谷歌搜索一下,就会向您展示如何创建一个简单的 class,正如您通过组合所描述的那样。
class mydataframe():
def __init__(self,data):
self.coredataframe = pd.DataFrame(data)
self.otherattribute = None
然后你可以添加自己的方法和属性...
在 OOP 继承模型中,组合模型“有一个”。
一般来说,除非您考虑到特定的多态设计,否则您应该选择组合而不是继承,因为它的耦合度较低且模块化程度更高。继承是您可以做的最强大的耦合。强耦合导致维护困难(万物相连,难以分离),而组合更容易重构。
如果设计不当或设计是渐进的,继承也可能导致混乱的继承层次结构。
也就是说,不要害怕将继承用于多态性。但要小心将其用于简单的代码重用。