From https://docs.python.org/3.6/library/functions.html#getattr
getattr(object, name[, default])Return the value of the named attribute of
object. name must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example,getattr(x, 'foobar')is equivalent tox.foobar. If the named attribute does not exist,defaultis returned if provided, otherwiseAttributeErroris raised.
How is getattr related to object.__getattribute__ and to object.__getattr__?
Does getattr call object.__getattribute__ or object.__getattr__? I would guess the former?