在Python中访问对象中的python对象

时间:2016-01-19 23:28:54

标签: python python-2.7 object python-2.x

我有一个名为“form”的Python对象,如下所示:

> dir(form)

['Meta', 'SECRET_KEY', 'TIME_LIMIT', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_errors', '_fields', '_get_translations', '_prefix', '_unbound_fields', '_wtforms_meta', 'csrf_enabled', 'csrf_token', 'data', 'errors', 'f', 'generate_csrf_token', 'hidden_tag', 'i', 'is_submitted', 'meta', 'node_1', 'node_2', 'node_3', 'node_4', 'nodes', 'populate_obj', 'process', 'r', 'reader', 'submit', 'validate', 'validate_csrf_data', 'validate_csrf_token', 'validate_on_submit']

此对象始终包含给定数量的名称以“node_”开头的对象。这些对象的数量总是不同。

我需要从另一个函数中检索所有这些对象,并获取form.node_1.data,form.node_2.data,form.node_3.data等的内容。

我可以列出所有这些“节点”对象:

for u in dir(form):
    if not u.startswith('__'):
        if u.startswith('node_'):
            print u

但我得到的只是一个字符串,而不是对象本身。

如何访问所有这些“节点对象”的值?

(我希望词汇表是正确的......)

2 个答案:

答案 0 :(得分:2)

尝试getattr

for u in dir(form):
    if not u.startswith('__'):
        if u.startswith('node_'):
            print getattr(form, u)

答案 1 :(得分:1)

你可以轻松抓住这些:

atribs = [getattr(form, attr) for attr in dir(form) if attr.startswith('node_')]