2014-02-06 35 views
4

我有一個屬性爲pandas DataFrame()的類。我想設置類,如果任何DataFrame()方法被調用,該方法將被應用於DataFrame()。將未定義的方法調用傳遞給包含不同對象的屬性

我已經設置了此方案已經:

import pandas as pd 
class A(object): 
    def __init__(self): 
     self.df = pd.DataFrame() 
     self.name = 'Charlie' 

    def get_name(self): 
     return self.name 

    def head(n=5): 
     return self.df.head(n) 

所以我可以這樣做:

a = A() 
a.get_name() 

輸出[1]: '查理'

a.head() 

出[2 ]:空DataFrame()

我不想要重新定義要通過的課程的每一種方法。這只是一個例子。我想在其他地方應用。

感謝,

回答

5

你需要重寫A類和delegate所有呼叫self.df和萬一屬性不是self.df發現然後尋找當前對象的__getattr__方法。我沒有熊貓我的系統上,所以我會定義另一個類的演示:

class B(object): 

    def func(self): 
     print 'Inside B' 

class A(object): 

    def __init__(self): 
     self.df = B() 
     self.name = 'Charlie' 

    def get_name(self): 
     return self.name 

    def __getattr__(self, attr): 
     try: 
      return getattr(self.df, attr) 
     except AttributeError: 
      #If attribute was not found in self.df, then try in self 
      return object.__getattr__(self, attr) 

輸出:

>>> a = A() 
>>> a.func() 
Inside B 
>>> a.get_name() 
'Charlie' 
+0

謝謝阿什維尼!那釘了它。 – piRSquared

相關問題