Symbol 클래스가 있습니다. 어떤 주어진 시간에, 나는 주어진 id를 가진 하나의 Symbol 사본 하나를 원한다. "interned"객체 pickling
registry = {}
class Symbol(object):
def __init__(self, id):
self.id = id
def __eq__(self, other):
return self is other
def symbol(id):
if id not in registry:
registry[id] = Symbol(id)
return registry[id]
예를
를 들어 내 기호 객체를 피클 수 있도록하고 싶습니다,하지만 난의 cPickle 내 기호 공장 전화를 얻는 방법을 알아낼 수 없습니다. 이제 getstate/setstate 재정의를 구현할 수는 있지만 패킹되지 않은 객체를 레지스트리에 이미 존재하는 객체와 병합하지는 않습니다. 심벌과 ID의 1 : 1 비율을 유지하면서 위의 클래스를 피클 링하는 방법은 무엇입니까?
편집 (상태 업데이트 제목 대신 "싱글"의 "구금") :
날 사용 사례를 설명하겠습니다. 우리는 이러한 기호를 사전에 키로 사용하고 있습니다.x = symbol("x")
y = pickle.loads(pickle.dumps(x))
x is y == True
그냥 싱글을 사용하지 마십시오
는 결과? – delnan
글쎄, 내 실제 경우에는 기호가 여분의 메타 데이터의 여러 필드를 가질 수 있습니다 "x는 y를 기반으로 비교"는 "x.foo == y.foo 및 x.bar == y보다 빠른 방법이 될 것입니다. bar와 ... " –
피클은'__init__'을 호출하지 않지만'__new__'를 호출합니다. – georg