Создание дескриптора только для чтения - PullRequest
0 голосов
/ 21 октября 2019

Я создал базовый дескриптор только для чтения:

class ReadOnlyDescriptor:
    def __init__(self):
        pass
    def __get__(self, obj, objtype=None):
        return obj._something
    def __set__(self, obj, value):
        raise AttributeError("Cannot set this!")
    def __delete__(self, obj):
        raise AttributeError("Cannot delete this!")


class Object:
     something = ReadOnlyDescriptor()
     def __init__(self, something='abc'):
         self._something=something

И он работает в простом примере:

>>> a=Object()
>>> a.something
'abc'
>>> a.something='asdf'
AttributeError: Cannot update this!
>>> del a.something
AttributeError: Cannot delete this!

Есть ли способ сделать вышеупомянутое более общим? Например, вместо того, чтобы вызывать obj._something в __get__ для его динамического вызова? Другими словами (кроме использования декораторов), что может быть более общим способом сделать вышеуказанное?

...