我有一个继承自pandas.DataFrame
的子类,并为我的实现添加了一些新方法。这些方法作用于并返回self的修改版本(基本上只是重复已经存在的可链方法的DataFrame模式,但具有扩展的功能):
class Subclass(pandas.DataFrame):
def new_method(self):
return Subclass(self.transform(...))
当我定义自己的方法时,很容易返回新的Subclass
实例。但是,当我从基类调用未被覆盖的方法时,返回的结果是一个新的DataFrame,而不是一个新的子类。因此,只要我使用基类方法,我就会失去实例中的任何新功能。
是否有一种方法(不重写每个方法在pandas.DataFrame
基类中,我怀疑可能在子类中使用)强制基类方法返回子类实例?换句话说,只要在Subclass
实例中使用DataFrame
构造函数,就默默地将其替换为Subclass
构造函数?
看一下文档,似乎有一个解决方案。
在你的类中,你需要重写这个属性并返回你自己的类。
@property
def _constructor(self):
return Sublclass
为了保持这种模式,您还应该在使用对_constructor
的引用返回对象时替换任何Subclass
调用,以便您自己类的任何子类也可以返回Subsubclass
而不是Subclass
。