要麼覆蓋__getattr__
:
class NewDataStructure:
def __init__(self):
self.df = pd.DataFrame()
# have some extra attributes here that the pandas DataFrame doesn't have
def __getitem__(self, key):
return self.df.__getitem__(key)
def __getattr__(self, item):
try:
return vars(self)[item]
except KeyError:
return getattr(self.df, item)
def to_excel(self, writer):
# do some extra stuff here that the pandas DataFrame doesn't do but use the pandas method eventually
self.df.to_excel(writer)
obj = NewDataStructure()
print(obj.ix)
# <pandas.core.indexing._IXIndexer object at 0x01FE7090>
# pandas' ix
print(obj.to_excel)
# <bound method NewDataStructure.to_excel of <__main__.NewDataStructure object at 0x005670F0>>
# NewDataStructure's to_excel
如果我們從NewDataStructure
類中刪除to_excel
,我們將使用大熊貓to_excel
:
class NewDataStructure:
def __init__(self):
self.df = pd.DataFrame()
# have some extra attributes here that the pandas DataFrame doesn't have
def __getitem__(self, key):
return self.df.__getitem__(key)
def __getattr__(self, item):
try:
return vars(self)[item]
except KeyError:
return getattr(self.df, item)
obj = NewDataStructure()
print(obj.to_excel)
# <bound method DataFrame.to_excel of Empty DataFrame
# Columns: []
# Index: []>
或者從pd.DataFrame
(可能更容易繼承和更好的方式去):
class NewDataStructure(pd.DataFrame):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
obj = NewDataStructure()
print(obj.to_excel)
# <bound method DataFrame.to_excel of Empty DataFrame
# Columns: []
# Index: []>
# pandas to_excel
如果我們將to_excel
添加到NewDataStructure中:
def to_excel(self, *args, **kwargs):
# do some extra stuff here that the pandas DataFrame doesn't do but use the pandas method eventually
super().to_excel(*args, **kwargs)
.
.
obj = NewDataStructure()
print(obj.to_excel)
# <bound method NewDataStructure.to_excel of Empty NewDataStructure
# Columns: []
# Index: []>