我有一个类,其属性将是 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()
我不想重新定义要传递的类的每个方法。这只是一个例子。我想在其他地方应用它。
谢谢,
圆周率
最佳答案
您需要覆盖 A
类的 __getattr__
方法和 delegate所有对 self.df
的调用,如果在 self.df
中找不到该属性,则在当前对象中查找它。我的系统上没有 Pandas,所以我将为演示定义另一个类:
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'
关于python - 将未定义的方法调用传递给包含不同对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21610363/