Мне нужно убедиться, что все названные параметры были переданы методу (я не хочу никаких значений по умолчанию).Является ли следующий способ обеспечить его соблюдение?
class X: def func(self, **kwargs): if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'): raise ArgException(kwargs)
Для Python 2.x лучшим выбором будет ответ Хью (т. Е. Просто использовать именованные позиционные аргументы).
Для Python 3.x у вас также есть опция , требующая использования аргументов ключевого слова (вместо простого разрешения) следующим образом:
class X(object): def func(self, *, arg1, arg2, arg3): pass
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
Вы хотите разрешить другие аргументы?Если нет:
Если да:
class X(object): def func(self, arg1, arg2, arg3, **kwargs): pass
Это для всех версий Python.