Как я могу получить доступ к атрибуту объектов, когда он является частью списка объектов

В основном я использую модуль python-keystoneclient в проекте Django для обучения.

Окружающая среда:

python 3.6.3
django 1.10.8
python-keystoneclient 3.14.0

У меня есть запрос к API, который возвращает список объектов

projects = keystone.projects.list()

for p in projects:
    print(p)


<Project description=, domain_id=default, enabled=True, id=1c1a662d73c04f92acce6c50fb75dc3e, is_domain=False, links={'self': 'http://172.16.100.10/identity/v3/projects/1c1a662d73c04f92acce6c50fb75dc3e'}, name=alt_demo, parent_id=default>
<Project description=, domain_id=default, enabled=True, id=311f76914cba43e18bfb416c72d8ad5e, is_domain=False, links={'self': 'http://172.16.100.10/identity/v3/projects/311f76914cba43e18bfb416c72d8ad5e'}, name=demo, parent_id=default>
<Project createddate=2018-01-26, department=department1, description=Bob3, domain_id=default, emailaddress=email@example.com, enabled=True, familyname=Jones, firstname=Bob, id=4d4dabcc39ac4323a8665ba01efa65d7, is_domain=False, links={'self': 'http://172.16.100.10/identity/v3/projects/4d4dabcc39ac4323a8665ba01efa65d7'}, name=PROJ-BOB3, parent_id=default, sandbox=True, telephone=+99999999999, tos=on, username=bjones> 
<Project description=, domain_id=default, enabled=True, id=916daf2b642944729d284643b355e5a2, is_domain=False, links={'self': 'http://172.16.100.10/identity/v3/projects/916daf2b642944729d284643b355e5a2'}, name=service, parent_id=default> 
<Project description=, domain_id=efc1097d56b047099645cbdb53a89c13, enabled=True, id=ab80834046864705b47bfd9478cfe715, is_domain=False, links={'self': 'http://172.16.100.10/identity/v3/projects/ab80834046864705b47bfd9478cfe715'}, name=swiftprojecttest4, parent_id=efc1097d56b047099645cbdb53a89c13> 
<Project description=Bootstrap project for initializing the cloud., domain_id=default, enabled=True, id=bad74eb9e68546208232310dab8144d0, is_domain=False, links={'self': 'http://172.16.100.10/identity/v3/projects/bad74eb9e68546208232310dab8144d0'}, name=admin, parent_id=default> 
<Project description=, domain_id=default, enabled=True, id=d52a43a6f1cb408592b02aaa3dbb618d, is_domain=False, links={'self': 'http://172.16.100.10/identity/v3/projects/d52a43a6f1cb408592b02aaa3dbb618d'}, name=invisible_to_admin, parent_id=default> 
<Project description=, domain_id=default, enabled=True, id=f9c8ca81dbd34c07bce3b4bf19af102c, is_domain=False, links={'self': 'http://172.16.100.10/identity/v3/projects/f9c8ca81dbd34c07bce3b4bf19af102c'}, name=swiftprojecttest2, parent_id=default> 
<Project description=, domain_id=default, enabled=True, id=fbdb58e9120c49348a0eb5dfb7e984d0, is_domain=False, links={'self': 'http://172.16.100.10/identity/v3/projects/fbdb58e9120c49348a0eb5dfb7e984d0'}, name=swiftprojecttest1, parent_id=default>

Как видите, второй элемент в списке имеет больше атрибутов, чем остальные

Когда я использую следующее

for p in projects:
    print(p.id)

Я получаю такой результат

1c1a662d73c04f92acce6c50fb75dc3e
311f76914cba43e18bfb416c72d8ad5e
4d4dabcc39ac4323a8665ba01efa65d7
916daf2b642944729d284643b355e5a2
ab80834046864705b47bfd9478cfe715
bad74eb9e68546208232310dab8144d0
d52a43a6f1cb408592b02aaa3dbb618d
f9c8ca81dbd34c07bce3b4bf19af102c
fbdb58e9120c49348a0eb5dfb7e984d0

Если я попытаюсь сделать это

for p in projects:
    print(p.createddate)

Я получаю эту ошибку

~/.virtualenvs/sandbox/lib/python3.6/site-packages/keystoneclient/base.py in __getattr__(self, k)
    505                 return self.__getattr__(k)
    506
--> 507             raise AttributeError(k)
    508         else:
    509             return self.__dict__[k]

AttributeError: createddate

Я ожидал, что это напечатает одну строку с True.

если я использую ipython и запускаю

п. с вкладками я вижу, что другие атрибуты не доступны

In [100]: p.
             delete enabled human_id is_loaded name set_loaded
             description get   id  links  NAME_ATTR   to_dict
             domain_id HUMAN_ID is_domain manager parent_id update

Таким образом, другие атрибуты недоступны. Я пропустил шаг?

Буду признателен за помощь, когда я ошибся.

1 ответ

Решение

Вы могли бы сделать это:

for p in projects:
    if hasattr(p, 'createddate'):
        print(p.createddate)
Другие вопросы по тегам