На вопрос:
Почему дескрипторы не могут быть атрибутами экземпляра?
он ответил :
объекты дескриптора должны жить в классе, а не в экземпляре
так как это реализовано __getattribute__
.
Простой пример. Рассмотрим дескриптор:
class Prop(object):
def __get__(self, obj, objtype=None):
if obj is None:
return self
return obj._value * obj._multiplier
def __set__(self, obj, value):
if obj is None:
return self
obj._value = value
class Obj(object):
val = Prop()
def __init__(self):
self._value = 1
self._multiplier = 0
Рассмотрим случай, когда каждый obj имеет несколько Prop: мне нужно будет использовать уникальные имена для идентификации значений и множителей (например здесь. Наличие дескриптора экземпляра объект позволит хранить _multiplier
(и _value
) в самом дескрипторе, упрощая несколько вещей.
Чтобы реализовать атрибуты дескриптора экземпляра, вам необходимо:
- создать класс экземпляра См. здесь
- override
__getattribute__
Смотрите здесь
Я знаю, что подобные вопросы были подняты раньше, но я не нашел реального объяснения:
- Почему Python разработан таким образом?
- Каков предложенный способ хранения информации, необходимой для дескриптора, но для каждого экземпляра?