python: 验证函数参数
我需要确保在调用一个方法时,所有的命名参数都被传递过去(我不想要任何默认值)。下面的方式是确保这一点的最佳方法吗?
class X:
def func(self, **kwargs):
if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'):
raise ArgException(kwargs)
3 个回答
0
你想要允许其他参数吗?如果不想的话:
class X(object):
def func(self, arg1, arg2, arg3):
pass
如果想的话:
class X(object):
def func(self, arg1, arg2, arg3, **kwargs):
pass
这适用于所有版本的Python。
3
class X(object):
def func(self, **kwargs):
required = set(['arg1','arg2','arg3'])
if not set(kwargs.keys()).issuperset(required):
raise ArgException(kwargs)
class X(object):
def func(self, arg1, arg2, arg3):
pass
虽然你可以让解释器自己处理这个问题:
5
对于Python 2.x,Hugh的回答(也就是直接使用命名的位置参数)是最好的选择。
而对于Python 3.x,你还可以选择强制使用关键字参数(而不仅仅是允许使用),具体方法如下:
class X(object):
def func(self, *, arg1, arg2, arg3):
pass