【问题标题】:How to replace a base class with a subclass -- even when base methods return new base class instances如何用子类替换基类——即使基方法返回新的基类实例
【发布时间】:2021-10-13 22:11:14
【问题描述】:

我有一个继承自pandas.DataFrame 的子类,并添加了一些特定于我的实现的新方法。这些方法作用于并返回 self 的修改版本(基本上只是重复已经存在但具有扩展功能的可链接方法的 DataFrame 模式):

class Subclass(pandas.DataFrame):

    def new_method(self):
        return Subclass(self.transform(...))

当我定义自己的方法时,很容易返回新的Subclass 实例。但是,当我从未覆盖的基类中调用方法时,返回的结果是一个新的 DataFrame, 不是 一个新的子类。因此,一旦我使用基类方法,我的实例就会失去任何新功能。

有没有办法强制基类方法返回子类实例?换句话说,无论在Subclass 实例中使用DataFrame 构造函数的任何位置,都将其替换为Subclass 构造函数?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    Looking at the documentation, it appears there is a solution provided for this.

    在你的类中,你需要重写这个属性并返回你自己的类。

    @property
    def _constructor(self):
        return Sublclass
    

    为了保持这种模式,您还应该在返回具有对_constructor 的引用的对象时替换任何Subclass 调用,以便您自己类的任何子类也可以返回Subsubclass 而不是Subclass

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 2010-12-19
      • 2018-02-10
      • 1970-01-01
      相关资源
      最近更新 更多