파이썬의 디스크립터에 대한 몇 가지 사항을 명확히하고 싶습니다. 몇 가지 복잡한 set/mechanics를 사용하여 클래스에 속성을 추가하고 해당 계산 된 값을 디스크립터 객체에 캐시하려고합니다. 단순화 된 예는 다음과 같습니다파이썬 : 디스크립터의 캐시 값
class Pro(object):
"""My descriptor class"""
def __init__(self):
self.value = None
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
self.value = value
class Something(object):
"""My simple class"""
pro = Pro()
a = Something()
a.pro = 1
b = Something()
b.pro = 2
print(a.pro, b.pro) # At first, I've expected them to be 1 and 2
나는 분명히 내가 잘못했다 pro
속성이 Something
의 모든 인스턴스에 대한 Pro
의 고유 한 인스턴스 될 것이라고 어떻게 든 생각했다. 마치 대신 과 __get__
과 같이 instance._value
을 사용해야하는 것처럼 보이지만 실제로는 Pro
클래스의 모든 것을 숨기를 바랬습니다. 이것은 가능한가? 감사!
한
WeakKeyDictionary
은 한 번Something
의 인스턴스가 참조가 다음 남아 있지 가비지 정상dict
가능하지 않은 즉시 수집이 있는지 확인합니다 [this] (https://pypi.python.org/pypi/cached-property/0.1.5)를 보셨습니까? – Lemming@Lemming, 꽤 고맙게 여겨지지만, 고마워,하지만 난 표준 라이브러리로만 이것을 해결하기를 바랬다 :) –
충분히 공정하게. Btw, 대부분의 파이썬 패키지는 오픈 소스입니다. [실제 코드] (https://github.com/pydanny/cached-property/blob/master/cached_property.py)는 상당히 작으며 비 스레딩 버전은 추가 패키지가 필요하지 않습니다. – Lemming