- pickle을 이용해 객체를 저장하고 객체를 불러올 때 객체를 만든 class가 정의되어 있지 않다면 AttributeError를 발생한다.
import pickle
class Myclass():
my_obj = Myclass()
with open('파일명.pickle', 'wb') as file:
pickle.dump(my_obj, file)
import pickle
with open('파일명.pickle', 'rb') as file:
load_my_obj= pickle.load(file)
class Myclass():
with open('파일명.pickle', 'rb') as file:
load_my_obj= pickle.load(file)
- 또한 실행 되는 py 파일에 __module_name이 "__main__"이 아니라면 AttributeError를 발생시키기 때문에 클래스가 로드된 __module_name으로 변경시켜줘야 한다.
import pickle
from .ex1 import Myclass
with open('파일명.pickle', 'rb') as file:
load_my_obj= pickle.load(file)
def get_load_my_obj():
return load_my_obj
import pickle
from .ex1 import Myclass
class MyCoustomUnpickler(pickle.Unpickler):
def find_class(self, __module_name: str, __global_name: str):
if __module_name == '__main__':
__module_name = __name__
return super().find_class(__module_name, __global_name)
with open('파일명.pickle', 'rb') as file:
load_my_obj = MyCoustomUnpickler(file)
load_my_obj = load_my_obj.load()
def get_load_my_obj():
return load_my_obj
from .ex3 import get_load_my_obj as ex3
from .ex4 import get_load_my_obj as ex4
if __name__ == '__main__':
load_my_obj = ex3()
load_my_obj = ex4()