2011-02-03 181 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 # ... 
相关问题