RecursionError при загрузке маринованного класса с помощью пользовательских методов magi c - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь перехватить, а затем перезагрузить экземпляр класса, для которого были переопределены некоторые магические 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

Честно говоря, я действительно не понимаю, что происходит и как это решить:)

...