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.
The setattr() function sets the value of the specified attribute of the specified object.
Python setattr() method is used to assign the object attribute its value.
What is the use of the setattr() method in inheritance? The use case of setattr() in inheritance is the same, i.e., to assign value to the attributes of an object.
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.
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:
x
itself has a __setattr__
in it's private dictionary (so x.__dict__[__setattr__] = ...
(this is almost certainly an error)
x.__class__
has a __getattribute__
method -- because __getattribute__
intercepts every lookup, even when the method/attribute exists
NB These two caveats apply to every syntactic sugar shortcut:
setattr
getattr
len
bool
hash
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With