Я хочу иметь возможность использовать дескрипторы python в классе с оптимизацией слотов:
class C(object):
__slots__ = ['a']
a = MyDescriptor('a')
def __init__(self, val):
self.a = val
Проблема, с которой я столкнулся, заключается в том, как реализовать класс дескриптора, чтобы иметь возможность хранить значения в экземпляре класса, который вызывает объект дескриптора. Обычное решение будет выглядеть так, как показано ниже, но не будет работать, поскольку «dict» больше не определяется, когда «slots» вызываются в классе C:
class MyDescriptor(object):
__slots__ = ['name']
def __init__(self, name_):
self.name = name_
def __get__(self, instance, owner):
if self.name not in instance.__dict__:
raise AttributeError, self.name
return instance.__dict__[self.name]
def __set__(self, instance, value):
instance.__dict__[self.name] = value