我的(第一个!)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 ...
我很确定这是可能的,但没有找到......
答案 0 :(得分:5)
完全符合你的要求(减去...
s):
>>> class foo:
pass
>>> def make_it(cls):
return cls()
>>> make_it(foo)
<__main__.foo instance at 0x011D9B48>
如果你愿意,可以修改它以接受/传递params到类构造函数,但这个想法非常好。类是Python中的第一类对象。
答案 1 :(得分:4)
你几乎把它弄好了,只是放下点。类是第一类值,您可以只引用它们,就任何对象而言。 f
为return f_helper(id, ClassA)
,g
为return f_helper(id, ClassB)
。
答案 2 :(得分:2)
您可以将callable传递给函数;类本身是可调用的,返回的对象是所述类的实例。
def f_helper(id, the_class):
c = the_class(id)
# ...
return # ...