如何在循环中遍历 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\])