2013-04-22 45 views
0

我敢肯定,可能有一個簡單的解決方案,但無論如何,問題是這樣的:我有兩個類,說AB,它們都具有數據框類似的屬性 - 這些屬性是數據框類的實例,稱之爲C,它有自己的方法。我想定義一個類似'interface like'的類D,它具有可以對這些屬性進行操作的方法(即對屬性爲AB的數據幀進行操作)。Python - 繼承類方法來操作類屬性

編輯爲清楚起見:在下面接下來,讓abC類dataframes(即實例)。所以C的方法可用於ab

更加明確:假設aA的數據框類屬性,其屬性爲Series1,...,Seriesn。由於a與數據幀相似,我可以撥打 a.Series1, a.Series2, ...等來訪問Series1,Series2的內容a。當然aA的一個屬性,所以我實際上打電話A.a.Series1, A.a.Series2 ..等,a有自己的方法從類C所以我可以撥打A.a.Series1.methodfromclassC()沒有問題。無論如何。現在假設我想以一致的方式對a.Seriesjb.Seriesj的內容進行轉換,作爲類D中的方法實現,AB都可以訪問。這個想法是,我想能夠呼叫A類的成員,如下所示:A.a.Seriesj.transformseries()。我遇到的問題是Seriesj有其自己的方法(繼承自類C)和transformseries()不是其中之一。

這可能似乎有點令人費解,但想法是,最終我可以給D各種方法改變數據框的狀態鏈的多個呼叫屬性:A.a.Series2.transform1().transform2().transformj()B.b.Seriesj.transform6().transform3() 等,使A.aB.b最後表示是我想要的形式。

+1

這個解釋對我來說並不清楚。關於最後的句子,我認爲這足以讓「自我」獲得這種東西。 – Bakuriu 2013-04-22 15:03:54

+0

你在這裏失去了我:如果'a'從'C'繼承,並不一定遵循'a.Series1'繼承自'C'。你認爲它應該,還是解釋失蹤的一部分? – kojiro 2013-04-22 15:07:51

+0

小二郎:對不起,對'a'繼承自C,'a.Series1'繼承於C。爲了清晰起見,我將編輯帖子。謝謝 – optional 2013-04-22 15:09:52

回答

1

您是否考慮過向您的Seriesn「注入」新方法?在Python中,你可以動態地添加方法的類是這樣的:

setattr(MyClass, 'new_method', lambda self: 'return value') 

它將在之前實例化對象甚至不工作。因此,您可以將自定義方法添加到Pandas的Series和/或Dataframe類。