问题描述
我正在开发一个使用 stevedore 作为插件的遗传算法包。我提供了 GA 的每个组件(种群、交叉、变异、适应度等)的默认实现,但目标是允许用户使用插件来替换任何或所有默认组件。
我有一个 geneticAlgorithm 类来协调插件并执行算法的每一步。每个方法调用正确的一个或多个插件并返回结果。例如,mutate 方法如下所示:
def mutate(self,**kwargs):
"""Mutates population
Keyword Args:
population (np.ndarray): the population to mutate. Shape is n_individuals x n_chromosomes.
mutation_rate (float): decimal value from 0 to 1,default .05
Returns:
np.ndarray of same shape and dtype as population
"""
if mgr := self.driver_managers.get('mutate'):
return mgr.driver.mutate(**kwargs)
population = kwargs['population']
for ext in self.extension_managers['mutate'].extensions:
try:
kwargs['population'] = population
population = ext.obj.mutate(**kwargs)
except:
continue
return population
为了保持灵活性,我不想在方法签名中包含插件实现可能不会使用的参数。然而,这使得记录 GA 类变得困难。我包含了一个 Keyword Args 部分,但这不是 mkdocs/mkdocstrings 识别的标准部分,因此它没有正确显示在已发布的文档中。
这让我想到了两个问题:
(1) 指定插件可能不使用的参数(这里是population和mutation_rate)然后还使用**kwargs来允许额外的关键字参数是一种好习惯,还是最好保持原样只有 **kwargs?
(2) 在使用 Google 风格的文档字符串时记录 **kwargs 的最佳实践是什么?
预先感谢您的想法和建议!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)