どちらか__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
我々はto_excel
NewDataStructure
からクラスを削除した場合、私たちはパンダ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
NewDataStructureにto_excel
を追加した場合:
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: []>