2009-11-02 68 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()

相關問題