pythonsetattr

What's the difference between setattr() and object.__setattr__()?


I know that you can't call object.__setattr__ on objects not inherited from object, but is there anything else that is different between the two? I'm working in Python 2.6, if this matters.


Solution

  • Reading this question again I misunderstood what @paper.cut was asking about: the difference between classic classes and new-style classes (not an issue in Python 3+). I do not know the answer to that.


    Original Answer*

    setattr(instance, name, value) is syntactic sugar for instance.__setattr__(name, value)**.

    You would only need to call object.__setattr__(...) inside a class definition, and then only if directly subclassing object -- if you were subclassing something else, Spam for example, then you should either use super() to get the next item in the heirarchy, or call Spam.__setattr__(...) -- this way you don't risk missing behavior that super-classes have defined by skipping over them directly to object.


    * applies to Python 3.0+ classes and 2.x new-style classes


    **There are two instances where setattr(x, ...) and x.__setattr__(...) are not the same:

    NB These two caveats apply to every syntactic sugar shortcut: