如何将类构造函数传递给python函数

时间:2015-09-22 05:29:01

标签: python function class constructor

假设我有一个类Foo,我想定义一个接收类构造函数作为参数的函数:

def bar(class_name):
    local_class = None
    # TODO: if I call bar(Foo()), I want to get local_class = Foo()

我该如何实现这个功能?

2 个答案:

答案 0 :(得分:4)

以下class_name功能将起作用。请注意,第一个参数将是本身而不是类的名称,因此“str”(暗示它是args)具有误导性。 klass将是一个args元组,用于在klass的调用中使用* -unpacked初始化def bar(klass, *args): # Now you can create multiple independent objects of type klass, # all initialized with the same args obj1 = klass(*args) obj2 = klass(*args) # ... # do whatever you have in mind with the objs 个对象。你在后来的评论中说过,你想要“创建多个独立的对象”,所有相同的类并使用相同的args初始化,所以我修改了我的答案以反映:

local_class

你的“klass”根本不是一个类,而是一个Foo的实例,所以这是一个坏名字;无论如何你想要其中几个。

假设使用三个int参数初始化Baz个对象,并使用两个字符串初始化bar个对象,可以这样调用bar(Foo, 1, 2, 3) bar(Baz, 'Yo', 'bro')

<div><font face=""Times New Roman"" size=3 color=black>MyCustomer Name Ltd.</font></div>

<div><font face=""Times New Roman"" size=3 color=black>MyCustomer Adress</font></div>

<div><font face=""Times New Roman"" size=3 color=black>MyCustomer Zip-code MyCustomer City</font></div>

特别是在像Python这样的动态类型语言中,当变量具有误导性名称时,对代码的推理会更加困难。

答案 1 :(得分:0)

何时可以将类名作为参数传递给函数,然后调用class_name()。例如,如果你也想传递参数。

class Foo:
    def __init__(self, arg1, arg2):
        pass

def bar1(class_name):
    args = ("val1", "val2")
    local_class = class_name(*args)

def bar2(class_name):
    kwargs = {'arg1':'val1','arg2':'val2'}
    local_class = class_name(**kwargs)

您可以调用以下函数:

one = bar1(Foo)
two = bar2(Foo)

如果你真的想从一个字符串中读取this帖子。我建议你使用@Evan Fosmark的解决方案,因为应该避免使用evalglobals