python: проверка параметров функции - PullRequest
2 голосов
/ 02 февраля 2011

Мне нужно убедиться, что все названные параметры были переданы методу (я не хочу никаких значений по умолчанию).Является ли следующий способ обеспечить его соблюдение?

class X:
  def func(self, **kwargs):
    if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'):
      raise ArgException(kwargs)

Ответы [ 3 ]

5 голосов
/ 02 февраля 2011

Для Python 2.x лучшим выбором будет ответ Хью (т. Е. Просто использовать именованные позиционные аргументы).

Для Python 3.x у вас также есть опция , требующая использования аргументов ключевого слова (вместо простого разрешения) следующим образом:

class X(object):
    def func(self, *, arg1, arg2, arg3):
        pass
3 голосов
/ 02 февраля 2011
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
0 голосов
/ 02 февраля 2011

Вы хотите разрешить другие аргументы?Если нет:

class X(object):
    def func(self, arg1, arg2, arg3):
        pass

Если да:

class X(object):
    def func(self, arg1, arg2, arg3, **kwargs):
        pass

Это для всех версий Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...