Python - Как быстро вытащить несколько атрибутов из объекта? - PullRequest
0 голосов
/ 16 января 2020

У меня есть проприетарный объект job, имеющий несколько строковых атрибутов, не относящихся к методам, которые я хотел бы эффективно компилировать в список. Объект job имеет атрибут TAGS, который включает в себя полный список имен атрибутов, для которых я хотел бы скомпилировать значения, но не имеет метода для извлечения только значений. Я ищу способ использовать список TAGS для эффективного извлечения всех необходимых строковых атрибутов.

>>> job_object.TAGS
('date', 'id', 'name', 'state', 'starttime', 'endtime', 'runs', ...) # There are 9 in all

Я могу извлекать атрибуты по отдельности, но я хотел бы иметь эффективную реализацию и хотел бы скорее не жесткий код на случай, если TAGS изменится.

>>> job_object.id
'1426013702'

Я пытался использовать exec, но он, конечно, ничего не возвращает.

>>> [exec('job_object.{}'.format(tag)) for tag in job_object.TAGS]
[None, None, None, None, None, None, None, None, None, None, None, None, None]

Есть ли другой способ получить их без явного вызова каждого атрибута?

1 Ответ

2 голосов
/ 16 января 2020

Да, я не смог заставить exec работать так, как вы ожидаете.

Однако, похоже, это сработало:

print([getattr(job_object, tag) for tag in job_object.TAGS])

Однако я только что посмотрел документация для exec() и всегда возвращает None.

...