如何将类作为Python函数的参数

时间:2011-02-03 20:41:36

标签: 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 ...

我很确定这是可能的,但没有找到......

3 个答案:

答案 0 :(得分:5)

完全符合你的要求(减去... s):

>>> class foo:
    pass

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

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

如果你愿意,可以修改它以接受/传递params到类构造函数,但这个想法非常好。类是Python中的第一类对象。

答案 1 :(得分:4)

你几乎把它弄好了,只是放下点。类是第一类值,您可以只引用它们,就任何对象而言。 freturn f_helper(id, ClassA)greturn f_helper(id, ClassB)

答案 2 :(得分:2)

您可以将callable传递给函数;类本身是可调用的,返回的对象是所述类的实例。

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