Неверное количество позиционных аргументов для валидатора атрибутов Python?

Я встретил ту же проблему. Выбранное решение мне очень помогло, но я считаю необходимым добавить точность, чтобы сделать функциональный код вопроса: определить лямбда-функцию вне цикла. Кстати, значение по умолчанию не требуется.

foo = lambda d: lambda : self.root.change_directory(d)
for d in directorys:
    self.command["cd " + d] = (foo(d))
0
задан Wai Ha Lee 4 April 2019 в 23:16
поделиться

1 ответ

Причина в следующем предложении в связанных документах:

Они получают инициализированный экземпляр, Атрибут и переданное значение.

Для более продвинутой проверки, подпись def validator(inst, attribute, val).

Просто измените подписи на

def _validate_polling_interval(_, __, polling_interval):

и

def _validate_batch_size(_, __, batch_size):

, и это будет работать.

Вот полный пример описательной документации: http://www.attrs.org/en/stable/init.html#callables

P.S. Использование утверждений в производственном коде не лучшая идея. Например. запуск python -O лишит их. Я бы порекомендовал поднять старый добрый ValueErrors или даже описательный его подкласс.

0
ответ дан hynek 4 April 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: