使用** kwargs向后兼容

Vic*_*son 2 python python-3.x

我曾经有一个带有一些关键字参数的函数: def foo(a=None, b=None)

在我的代码的新版本中,我不再需要关键字(b)之一,而是想要将其删除。

我应该**kwargs像这样def foo(a=None, **kwargs)向后添加功能以实现向后兼容吗?

在这种情况下,最佳做法是什么?

如果用户升级到我的软件包的新版本,我不想破坏他们的代码。

wim*_*wim 8

在这种情况下,最佳做法是什么?

在一个版本中,添加不赞成使用的警告而不更改功能签名

import warnings

def foo(a=None, b=None):
    if b is not None:
        warnings.warn("use of b is deprecated", DeprecationWarning)
    ...
Run Code Online (Sandbox Code Playgroud)

您仍然有义务立即处理b,因此不要仅仅忽略它-弃用警告表示“它将消失”,而不是“它已经消失”!

在您的发行说明和文档中提到此关键字已弃用,并说它将在下一版本中删除。然后,在下一个版本中-在主要版本中,可能在次要版本中,而不是bugfix micro版本中-您可以删除它。

def foo(a=None):
    ...
Run Code Online (Sandbox Code Playgroud)

提及已在发行说明中删除此参数,并将其从文档中完全删除。

相关阅读:语义版本控制