사용자 지정 함수를 통해 일부 값을 변환하는 클래스가 있습니다. 함수에 대한 참조는 생성자에서 전달되고 특성으로 저장됩니다. 나는 피클하거나 수업을 복사 할 수 있기를 원합니다. __ getstate __() 메서드에서 필독 또는 복사를 위해 안전하게 사전 항목을 문자열로 변환합니다. 그러나 __ setstate __() 메서드에서 문자열을 함수 참조로 다시 변환하려고합니다. 따라서 새 클래스가 값을 변환 할 수 있습니다.파이썬에서 문자열을 함수 참조로 변환하는 방법
class transformer(object):
def __init__(self, values=[1], transform_fn=np.sum):
self.values = deepcopy(values)
self.transform_fn = transform_fn
def transform(self):
return self.transform_fn(self.values)
def __getstate__(self):
obj_dict = self.__dict__.copy()
# convert function reference to string
obj_dict['transform_fn'] = str(self.transform_fn)
return obj_dict
def __setstate__(self, obj_dict):
self.__dict__.update(obj_dict)
# how to convert back from string to function reference?
전달되는 함수 참조는 모든 함수가 될 수 있으므로 고정 된 함수 참조 집합이있는 사전을 포함하는 솔루션은 실제/유연성이 충분하지 않습니다. 나는 다음과 같이 사용할 것이다.
from copy import deepcopy
import numpy as np
my_transformer = transformer(values=[0,1], transform_fn=np.exp)
my_transformer.transform()
이 출력 : 배열 ([1, 2.71828183])는
new_transformer = deepcopy(my_transformer)
new_transformer.transform()
이 날을 준다 : 형식 오류를 예상대로 'STR'객체가 호출 아니다.
매력처럼 작동합니다. 정말 고마워. – worldcitizen