UserList - which methods needs to be overriden?
Peter Otten
__peter__ at web.de
Thu Jun 9 08:58:20 EDT 2016
Nagy László Zsolt wrote:
>
>>> Is there a way to easily find out which methods of are mutating the
>>> collection? Other than going over the source and checking all (normal
>>> and inherited) methods?
>> How about
>>
>> set(dir(collections.UserList)) - set(dir(collections.Sequence))
> Thanks. It narrows down the list of possible methods to be examined.
>
>> I thought it was the other way round and UserList/UserDict were only kept
>> for backwards-compatibility, but don't find anything in the docs to
>> support this...
> Are you saying that for any new project, I should subclass from list and
> dict, instead of UserList and UserDict?
Using the built-in list or dict is problematic because sometimes the
subclass methods are ignored when the internal data is accessed (sorry, I
don't have an example).
I thought you should subclass MutableSequence instead of UserList, but I may
have been wrong. While you minimize your effort -- just add methods until
you can instantiate your subclass -- the resulting class will not be very
efficient.
How detailed is your change notification? If it's always the same method
invocation you may be able to create wrappers like
def whatever(self, *args):
try:
return super().whatever(*args)
finally:
self.changed()
automatically, and the base class, be it list or UserList or whatever
becomes a detail that can be chosen on a case by case basis.
More information about the Python-list
mailing list