Я пытаюсь перехватить, а затем перезагрузить экземпляр класса, для которого были переопределены некоторые магические c методы.
Это код, который я выполняю:
import pickle
import pandas as pd
df = pd.DataFrame(data=[[1,2,3], [4,5,6]])
class CustomDF():
def __init__(self, df: pd.DataFrame):
assert type(df) is pd.DataFrame
self.df = df
def __getattr__(self, name):
return getattr(self.df, name)
def __getitem__(self, item):
return self.df[item]
def __setitem__(self, index, value):
self.df[index] = value
print(df.head())
c_df = CustomDF(df)
pickled = open('aaa.pkl', "wb")
pickle.dump(c_df, pickled)
print('pickled.')
pickled = open('aaa.pkl', "rb")
result = pickle.load(pickled)
и это ошибка:
---------------------------------------------------------------------------
RecursionError Traceback (most recent call last)
<ipython-input-1-4e80282617b2> in <module>
27
28 pickled = open('aaa.pkl', "rb")
---> 29 result = pickle.load(pickled)
<ipython-input-1-4e80282617b2> in __getattr__(self, name)
10
11 def __getattr__(self, name):
---> 12 return getattr(self.df, name)
13
14 def __getitem__(self, item):
... last 1 frames repeated, from the frame below ...
<ipython-input-1-4e80282617b2> in __getattr__(self, name)
10
11 def __getattr__(self, name):
---> 12 return getattr(self.df, name)
13
14 def __getitem__(self, item):
RecursionError: maximum recursion depth exceeded
Честно говоря, я действительно не понимаю, что происходит и как это решить:)