Ответ 1
Поскольку вы также можете использовать динамическую переменную:
somevar = 'foo'
getattr(x, somevar)
Вы не можете сделать это с помощью регулярного синтаксиса доступа к атрибутам.
Обратите внимание, что getattr()
также принимает необязательное значение по умолчанию, которое должно быть возвращено, если атрибут отсутствует:
>>> x = object()
>>> getattr(x, 'foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'foo'
>>> getattr(x, 'foo', 42)
42
Используя getattr()
, вы можете вытащить имя атрибута из чего-то другого, а не буквала:
for attrname in dir(x):
print('x.{} = {!r}'.format(attrname, getattr(x, attrname))
или вы можете использовать setattr()
для установки динамических атрибутов:
for i, value in enumerate(dynamic_values):
setattr(i, 'attribute{}'.format(i), value)