2011-02-03 83 views
0

在我的(第一個!)Python程序中有兩個函數,它們只因需要實例化的類而有所不同。我該如何給一個類作爲Python函數的參數

def f(id): 
    c = ClassA(id) 
    ... 
    return ... 

def g(id): 
    c = ClassB(id) 
    ... 
    return ...  

爲了避免重複的代碼,我希望能夠寫一個函數,它會以某種方式接受類實例化作爲參數。

def f(id): 
    return f_helper(id, ... ClassA ...) 

def g(id): 
    return f_helper(id, ... ClassB ...) 

def f_helper(id, the_class): 
    c = ... the_class ... (id) 
    ... 
    return ... 

我敢肯定,這是可能的,但怎麼沒發現?

回答

5

,當你擁有它(減去... S)的作品完全:

>>> class foo: 
    pass 

>>> def make_it(cls): 
    return cls() 

>>> make_it(foo) 
<__main__.foo instance at 0x011D9B48> 

這可以修改,以接受/傳遞類構造函數,如果你喜歡,但這個想法是完全正確的。類是Python中的第一類對象。

4

你說得很對,只是點點滴滴。對於任何對象,類都是一流的值,你可以引用它們。 f將是return f_helper(id, ClassA)g將是return f_helper(id, ClassB)

2

您可以將可調用函數傳遞給函數;一個類本身是可調用的,返回的對象是所述類的一個實例。

def f_helper(id, the_class): 
    c = the_class(id) 
    # ... 
    return # ... 
相關問題