Vincent Besanceney added the comment:

If I understand it right, in a simple case like this:

  class Foo(object):

    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 <rep...@bugs.python.org>
<http://bugs.python.org/issue21814>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to