Использование дескрипторов Python со слотами

Я хочу иметь возможность использовать дескрипторы 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
9
задан Yahya Abou Imran 4 September 2017 в 07:16
поделиться