class A(): pass a = A() b = A() a.b = b b.c = 1 a.b # this is b getattr(a, "b") # so is this a.b.c # this is 1 getattr(a, "b.c") # this raises an AttributeError
It seemed very natural to me to assume the latter. I'm sure there is a good reason for this. What is it?
getattribute: Is used to retrieve an attribute from an instance. It captures every attempt to access an instance attribute by using dot notation or getattr() built-in function. getattr: Is executed as the last resource when attribute is not found in an object.
The getattr() function returns the value of the specified attribute from the specified object.
What is getattr() used for? Explanation: getattr(obj,name) is used to get the attribute of an object. 6.
Python | getattr() method Python getattr() function is used to access the attribute value of an object and also gives an option of executing the default value in case of unavailability of the key.
You can't put a period in the getattr function because getattr is like accessing the dictionary lookup of the object (but is a little bit more complex than that, due to subclassing and other Python implementation details).
If you use the 'dir' function on a, you'll see the dictionary keys that correspond to your object's attributes. In this case, the string "b.c" isn't in the set of dictionary keys.
The only way to do this with getattr
is to nest calls:
getattr(getattr(a, "b"), "c")
Luckily, the standard library has a better solution!
import operator operator.attrgetter("b.c")(a)
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