假设我有一个泛型函数f,我想以编程方式创建一个行为与f相同但具有自定义签名的函数f2。
更多细节
给定列表l和字典d,我希望能够:将f2的非关键字参数设置为l中的字符串
将f2的关键字参数设置为d中的键,将默认值设置为d中的值
假设我们有l=["x", "y"]
d={"opt":None}
def f(*args, **kwargs):
#My code
然后我想要一个有签名的函数:def f2(x, y, opt=None):
#My code
特定用例
这只是我特定用例的简化版本。我只是举个例子。
我的实际用例(简化)如下。我们有一个通用的启动函数:def generic_init(self,*args,**kwargs):
"""Function to initiate a generic object"""
for name, arg in zip(self.__init_args__,args):
setattr(self, name, arg)
for name, default in self.__init_kw_args__.items():
if name in kwargs:
setattr(self, name, kwargs[name])
else:
setattr(self, name, default)
我们想在很多类中使用这个函数。特别是,我们希望创建一个函数init,其行为类似于泛型初始化,但在创建时间具有由某些类变量定义的签名:class my_class:
__init_args__=["x", "y"]
__kw_init_args__={"my_opt": None}
__init__=create_initiation_function(my_class, generic_init)
setattr(myclass, "__init__", __init__)
我们希望create_initiation_函数使用init_args和kw_init_args定义的签名创建一个新函数。是否可以写入创建初始化函数?
请注意:如果我只是想改进帮助,我可以设置doc。
我们想在创建时设置函数签名。在那之后,就不需要改变了。
我们不需要创建一个类似generic_init的函数,而是使用一个不同的签名,我们可以创建一个新的函数,使用所需的签名,它只调用generic_init
我们要定义创建初始化函数。我们不想手动指定新函数!
相关的