跳转至

如何在循环中遍历 Python对象的属性?


2019-01-08 by dongnan

问题描述

Asset 是 Django 中的一个 models类, asset 是 Asset类的对象

asset_list 列表对应了 Asset 类中的属性。

在使用 for循环遍历 asset对象中的属性,提示 asset.i 不存在这个属性。

>>> asset = Asset()
>>> a1.name
''
>>> asset_list
['name', 'category', 'project', 'os', 'wan', 'lan', 'remote', 'device', 'cpu', 'cores', 'memory', 'disk', 'remark', 'platform', 'region']

>>> for i in asset_list:
...   print(asset.i)
...
Traceback (most recent call last):
File "<console>", line 2, in <module>
AttributeError: 'Asset' object has no attribute 'i'

解决方法

使用 x.__dict__ 属性,获得一个字典,包括 属性名字和属性值。

>>> asset.__dict__
{'platform_id': None, 'remark': '', 'cpu': '', 'cores': None, 'id': None, 'remote': '', 'wan': '', 'author_id': None, 'os': '', 'project_id': None, '_category_cache': None, 'category_id': None, 'region_id': None, 'offline': False, 'disk': None, 'device': '', '_region_cache': None, '_project_cache': None, '_author_cache': None, 'memory': None, 'name': '', '_state': <django.db.models.base.ModelState object at 0x7fde2a1f8cc0>, 'created_time': None, '_platform_cache': None, 'lan': ''}
回到上面的例子,使用 x.__dict__ 解决这个问题。

>>> for i in asset_list:
...   print(asset.__dict__\[i\])

欢迎关注微信公众号: 运维录

参考

python 遍历属性值问题

Back to top