Я хотел бы прояснить некоторые вещи о дескрипторах Python. Я хочу добавить свойство к моему классу с помощью некоторой сложной механики set/get и кэшировать эти вычисленные значения внутри объекта дескриптора. Упрощенный пример выглядит следующим образом:Python: значения кэша дескрипторов
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
атрибут будет уникальным экземпляром Pro
для каждого экземпляра Something
, очевидно, что я был неправ. Похоже, я должен использовать что-то вроде instance._value
вместо self.value
внутри __set__
и __get__
, но я действительно надеялся спрятать все внутри Pro
класс. Возможно ли это? Благодаря!
Have вы посмотрели [это] (https://pypi.python.org/pypi/cached-property/0.1.5)? – Lemming
@ Lemming, выглядит довольно аккуратно, спасибо, но я надеялся решить эту проблему только стандартной библиотекой :) –
Достаточно честный. Btw, поскольку большинство пакетов python это открытый исходный код. [Фактический код] (https://github.com/pydanny/cached-property/blob/master/cached_property.py) довольно мал, а для версии без потоковой передачи не требуются дополнительные пакеты. – Lemming