我有一个名为
download
,可以通过两种方式使用:
download(git='[email protected]:someone/somerepo.git', ...)
download(url='https://someurl/something.tar.gz', ...)
提供时
git
作为关键字参数,可以提供其他关键字参数(可选或强制),例如
commit
,
tag
,
branch
等
提供时
url
,可以提供不同于的其他关键字参数
吉特
例如
md5
,或者不。
编程时
下载
函数,是否有一种传统的方法来指定哪些关键字参数组合是有效的,或者是否有一个库可以帮助实现这一点?例如,如果指定
犯罪
当
url
使用了参数,或者如果两者都使用则引发异常
吉特
和
url
使用了参数。
现在我所拥有的是:
def download(**kwargs):
if 'git' in kwargs:
if 'url' in kwargs:
# throw error
_download_with_git(**kwargs)
elif 'url' in kwargs:
_download_with_url(**kwargs)
else:
# throw error
这种解决方案目前可能很好,但对于具有更多参数组合的其他函数来说可能会变得棘手。我可以考虑写一个装饰器来概括模式,但我想知道是否已经存在某种东西。