I have a caching non data descriptor that stores values in the implementing class instances __dict__.
Something like: class Descriptor: def __init__(self, func, name=None, doc=None): self.__name__ = name or func.__name__ self.__module__ = func.__module__ self.__doc__ = doc or func.__doc__ self.func = func def __get__(self, obj, _=None): if obj is None: return self value = obj.__dict__.get(self.__name__, None) if value is None: value = self.func(obj) obj.__dict__[self.__name__] = value return value def __set__(self, obj, value): obj.__dict__[self.__name__] = value def __delete__(self, obj): if self.__name__ in obj.__dict__: del obj.__dict__[self.__name__] For the classes that decorate a method with this and accept list type data, I need to catch the following scenario (__set__ is reimplemented for the specific property by subclassing Descriptor): foo = MyClass() # This calls __set__ foo.some_property = [x for x in range(5)] # This bypasses __set__ obviously. foo.some_property.append(5) So re-implementing my own list class has the draw back for the user that he must create the data type is assigning directly. I want to avoid this. What workaround can I leverage to catch the append event so I can avoid the new data type? Thanks, jlc -- https://mail.python.org/mailman/listinfo/python-list