我需要确保将所有命名参数传递给方法(我不想要任何默认值)。以下是强制执行它的最佳方法吗?
class X:
def func(self, **kwargs):
if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'):
raise ArgException(kwargs)
答案 0 :(得分:5)
对于Python 2.x,Hugh的答案(即只使用命名的位置参数)是你最好的选择。
对于Python 3.x,您还可以选择要求使用关键字参数(而不仅仅是允许它),如下所示:
class X(object):
def func(self, *, arg1, arg2, arg3):
pass
答案 1 :(得分: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
答案 2 :(得分:0)
你想允许其他参数吗?如果不是:
class X(object):
def func(self, arg1, arg2, arg3):
pass
如果是:
class X(object):
def func(self, arg1, arg2, arg3, **kwargs):
pass
适用于所有版本的Python。