[英]Python retain subclass with method chaining
我定義了pandas Dataframe的子類。 子類基本上與數據框相同,但具有完成特殊任務的其他方法。
pandas數據框最方便的屬性之一是支持方法鏈接。 也就是說,數據框方法返回數據框類的實例。
我希望能夠使用這些方法,但是當我從子類中調用它們時,我得到了父類的實例。
import pandas as pd
class MySpecialDF(pd.DataFrame):
def sqrt(self, colname):
return self[colname]**2.0
df = MySpecialDF({'a':[1,2,3], 'b':[4,5,6]})
df.sqrt('a') # all good!
df = df.drop('b', axis=1) # returns a regular DF
df.sqrt('a') # AttributeError: 'DataFrame' object has no attribute 'sqrt'
我該如何設置,以便這些方法返回子類的實例?
我可以手動覆蓋單個方法,如下所示:
class MySpecialDF(pd.DataFrame):
def sqrt(self, colname):
return self[colname]**2.0
def drop(self, *args, **kwargs):
return MySpecialDF(super(MySpecialDF, self).drop(*args, **kwargs))
但是數據幀有很多這樣的數據,我不想為每個數據幀手動執行此操作。
我以為可能有一種方法可以應用一些包裝每個父方法的裝飾器,但是我不確定該怎么做或它是否正確。
對於子類繼承返回父實例的方法的所有情況,此問題都是普遍的。
有人知道如何解決此問題嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.