2009-11-02 66 views
1
  1. 如何将函数名称传递给函数然后调用它? 不使用getattribute可以这样做吗?如何将函数的名称传递给函数,然后调用它?

  2. 如何将类名传递给函数然后实例化类? 我知道我只是可以将该类的实例直接传递给该函数,但重要的是该类在调用该函数后被实例化了

+0

不使用getattr的原因是什么?看起来很明显的解决方案。 – mavnn 2009-11-02 10:02:08

+0

好吧......我无法确定这个班是新班级: -/ – 2009-11-02 10:06:00

+2

您应该通过班级,而不是班级名称。通过调用类来创建实例的方式与您在SilentGhost的回答中调用函数的方式完全相同 – 2009-11-02 10:25:08

回答

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'。 'string'不可调用。 – jfs 2009-11-02 10:13:28

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) 

您可以使用自己的字典空间(namespace),而不是globals

目前尚不清楚为什么你需要人工约束,如不直接传递函数/类对象,不使用getattr()

相关问题