2009-11-02 17 views
1
  1. Как передать имя функции функции, а затем вызвать ее? Можно ли это сделать без использования getattribute?Как передать имя функции функции, а затем вызвать ее?

  2. Как передать имя класса функции, а затем создать экземпляр класса? Я знаю, что я просто могу передать экземпляр класса непосредственно функции, но важно, чтобы класс получил экземпляр после, вызывающий функцию.

+0

В чем причина не использования getattr? Кажется очевидным решением. – mavnn

+0

хорошо ... Я не могу быть уверен, что класс является классом нового стиля: -/ –

+2

Вам следует передать класс, а не имя класса. Создайте экземпляр, вызвав класс точно так же, как вы бы вызвали функцию в ответе SilentGhost. –

ответ

5
def outer(f):   # any name: function, class, any callable 
    return f()   # class will be instantiated within the scope of the function 
+0

'name' обычно является строкой. И 'string' не является вызываемым. – jfs

1

Если у вас есть ограниченное количество вариантов вашего планирования использования, вы можете создать словарь со строковыми ключами и значениями функций/классов.

0

Почему бы не использовать функцию и класс напрямую?

class A(object): 
    pass 
def f(): 
    pass 
def g(func, cls): 
    func() 
    x = cls() 
g(f, A) 
2
namespace = globals() 
result = namespace[func_name]() 
instance = namespace[class_name](*some_args) 

Вы можете использовать свой собственный словарь (имен) вместо globals.

Непонятно, зачем вам нужны искусственные ограничения, например, не передавать непосредственно объекты функции/класса, не используя getattr().

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