Python 如何避免使用组合对数据帧进行子类化?

Python 如何避免使用组合对数据帧进行子类化?,python,python-3.x,pandas,class,subclassing,Python,Python 3.x,Pandas,Class,Subclassing,熊猫文档对其数据结构进行了分类。他们推荐的一种替代方法是使用组合,但他们只是让读者阅读维基百科关于组合与继承的文章。我找到的那篇文章和其他资源并没有帮助我理解如何使用组合来扩展pandasDataFrame。有人能解释一下这种情况下的合成,并告诉我合成可能是次分类的首选方案吗?一个简单的例子或者一个比维基百科文章更有启发性的信息链接会非常有用 在这个问题中,我特别要问的是,在有人可能试图将pd.DataFrame子类化的情况下,应该如何使用组合。我知道还有其他不涉及组合的扩展Python对象的解

熊猫文档对其数据结构进行了分类。他们推荐的一种替代方法是使用组合,但他们只是让读者阅读维基百科关于组合与继承的文章。我找到的那篇文章和其他资源并没有帮助我理解如何使用组合来扩展
pandas
DataFrame
。有人能解释一下这种情况下的合成,并告诉我合成可能是次分类的首选方案吗?一个简单的例子或者一个比维基百科文章更有启发性的信息链接会非常有用

在这个问题中,我特别要问的是,在有人可能试图将
pd.DataFrame
子类化的情况下,应该如何使用组合。我知道还有其他不涉及组合的扩展Python对象的解决方案,我询问了扩展
pandas
DataFrames
的问题,这导致了使用包装类的不同解决方案



我不明白“包装”和“组合”在这里指的是相同的方法,正如MaxYarmolinsky在下面的回答中指出的那样。我上面链接到的问题的第二部分对在这种情况下使用组合进行了更完整的讨论,它可能需要正确地处理
\uuuuu getattr\uuuuu
\uuuu getitem\uuuuuuuuu
(我意识到这对知道自己在做什么的人来说是显而易见的,但我不得不问我的上一个问题,因为我在自己尝试时未能获取/设置项目)。

只需通过谷歌搜索向您展示如何创建一个简单的类,正如您通过作文所描述的那样

  class mydataframe():
      def __init__(self,data):
          self.coredataframe = pd.DataFrame(data)
          self.otherattribute = None

然后,您可以添加自己的方法和属性…

只需通过谷歌搜索向您展示如何创建一个简单的类,正如您通过组合所描述的那样

  class mydataframe():
      def __init__(self,data):
          self.coredataframe = pd.DataFrame(data)
          self.otherattribute = None

然后,您可以在OOP继承模型中添加自己的方法和属性…

一个“is-a”关系,其中组合模型“has-a”

一般来说,你应该选择组合而不是继承,除非你考虑到一个特定的多态设计,因为它不那么紧密耦合,而且更模块化。继承是你能做的最强大的耦合。强耦合会导致维护困难(所有东西都是连接的,很难分离),而组合更容易重构

如果不注意设计或设计是增量的,继承也会导致混淆继承层次结构


也就是说,不要害怕将继承用于多态性。但要小心将其用于简单的代码重用。

在OOP继承模型中,是一种“is-a”关系,其中组合模型“has-a”

一般来说,你应该选择组合而不是继承,除非你考虑到一个特定的多态设计,因为它不那么紧密耦合,而且更模块化。继承是你能做的最强大的耦合。强耦合会导致维护困难(所有东西都是连接的,很难分离),而组合更容易重构

如果不注意设计或设计是增量的,继承也会导致混淆继承层次结构


也就是说,不要害怕将继承用于多态性。但要小心将其用于简单的代码重用。

那么合成和“包装”是一回事吗?是的,合成是所谓“包装”的一个例子。我不确定“包装”是否有严格的定义,它是一个更一般的概念。那么合成和“包装”呢是的,构图是所谓“包装”的一个例子。我不确定“包装”是否有严格的定义,它是一个更一般的概念。