假设我有一个类Foo,我想定义一个接收类构造函数作为参数的函数:
def bar(class_name):
local_class = None
# TODO: if I call bar(Foo()), I want to get local_class = Foo()
我该如何实现这个功能?
解决方法:
以下条形函数将起作用.注意,第一个参数将是一个类本身而不是类的名称,因此“class_name”(暗示它是一个str)具有误导性. args将是一个用于初始化klass对象的args元组,在调用klass时使用* -unpacked.您在稍后的评论中说过,您想要“创建多个独立对象”,所有相同的类并使用相同的args初始化,所以我修改了我的答案以反映:
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
你的“local_class”根本不是一个类,而是一个klass的实例,所以这是一个坏名字;无论如何你想要其中几个.
假设Foo对象初始化为三个int参数,而Baz对象有两个字符串,您可以像这样调用bar:
bar(Foo, 1, 2, 3)
bar(Baz, 'Yo', 'bro')
等等
特别是在像Python这样的动态类型语言中,当变量具有误导性名称时,对代码的推理更加困难.
标签:python,function,constructor,class
来源: https://codeday.me/bug/20190623/1272268.html