[docs] [issue21814] object.__setattr__ or super(...).__setattr__?
report at bugs.python.org
Sat Jun 21 09:41:06 CEST 2014
Vincent Besanceney added the comment:
If I understand it right, in a simple case like this:
def __setattr__(self, name, value):
# some logic, then...
super(Foo, self).__setattr__(name, value)
calling super is equivalent to calling object.__setattr__, but doesn't have any added-value since there's no cooperative multiple inheritance involved, in that case we are better off calling the parent class method directly.
If Foo evolves to have multiple ancestors, object has a __setattr__ method and that object is always the last class in the MRO chain, so any sequence of calls to super(..).__setattr__ is guaranteed to end with a call to object.__setattr__ method (assuming ancestors __setattr__ method, if any, calls super as well), and that may be what we want, i.e. to also benefit from an ancestor __setattr__ method.
Hmm, this last point may be too specific if not out of scope in regards to the documentation. Falling back to the original need, from the documentation "If __setattr__() wants to assign to an instance attribute...", so as you said, "calling object.__setattr__ gives a known, guaranteed behavior".
Python tracker <report at bugs.python.org>
More information about the docs