python: 验证函数参数

2 投票
3 回答
711 浏览
提问于 2025-04-16 11:03

我需要确保在调用一个方法时,所有的命名参数都被传递过去(我不想要任何默认值)。下面的方式是确保这一点的最佳方法吗?

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

撰写回答