2017-01-23 2 views
1

Я работаю с кодом, которые имеют эту Внешность:Создание словаря Динамично и автоматически назначать атрибуты из оценок функций

module.py:

def attribute3(): 
    return "something3" 


def attribute2(): 
    return "something2" 


def attribute1(): 
    return "something1" 

главный .py:

from module import attribute1, attribute2, attribute3 


def main(): 
    return { 
     "attribute1": attribute1(), 
     "attribute2": attribute2(), 
     "attribute3": attribute3() 
    } 

print main() 

И я хотел бы знать, есть ли лучший способ создать словарь в функции main, w без необходимости делать "attribute: function()". Мне кажется, что я повторяю себя.

У меня нет доступа к модулю.py, поэтому я не могу перейти в класс.

Я использую Python 2.5, потому что это устаревшее программное обеспечение.

Спасибо.

+0

У меня всего 2,7, но в этой версии ваш код работает отлично. Есть ли проблема, характерная для 2.5? – 098799

+0

Nop .. Я просто чувствую, что я отбиваю себя, делая 'attribute: function()', я хотел бы знать, есть ли более сжатый способ сделать это. – user98293989823

+0

'Защита основного(): д = {} для я в диапазоне (1,4): имени = "атрибут" ул (я) + имя2 = имя + "()" д [имя] = Eval (name2) return d' Это работает, но я не уверен, насколько это обобщается для вас, для конкретных имен функций и для того, чтобы сделать это так ... (извините за отсутствие разрывов строк) – 098799

ответ

1

Вы можете использовать getattr и вызвать произвольные возвращаемые функции.

import some_module 

def create_dict(module, names): 
    resp = {} 
    for name in names: # Iterate over an arbitrary number of arguments 
     # Get the function with the name provided and call it, 
     # setting the response as the value for the name 
     resp[name] = getattr(module, name)() 
    return resp 

print create_dict(some_module, ['attribute1', 'attribute2', 'attribute3']) 

Я не тестировал это на Python 2.5, но я не вижу причин, почему это не сработает.

+0

Отлично! Это именно то, что я искал, теперь я могу создать гибкий API !!! – user98293989823

Смежные вопросы