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. -- https://mail.python.org/mailman/listinfo/python-list