将未定义的方法调用传递给包含不同对象的属性

时间:2014-02-06 17:51:44

标签: python class oop delegates pandas

我有一个属性为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()

Out [2]:空DataFrame()

我不想重新定义类的每个方法都要通过。这只是一个例子。我想在其他地方申请。

谢谢,

1 个答案:

答案 0 :(得分:7)

您需要覆盖__getattr__类的A方法以及self.dfself.df的所有调用,如果在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) 中找不到该属性,则在当前对象中查找它。我的系统上没有Pandas,所以我将为演示定义另一个类:

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

<强>输出:

{{1}}