У меня есть еще более короткий ответ, с моей любимой функцией python - декораторами:
def single_keyword(func):
def single_keyword_dec(*args, **kw):
if len(kw) > 1:
raise Exception("More than one initializer passed: {0}".format(kw.keys()))
return func(*args, **kw)
return single_keyword_dec
@single_keyword
def some_func(self, foo=None, bar=None, baz=None):
print foo, bar, baz
some_func(object, foo=0)
some_func(object, foo=0, bar=0)
#result
0 None None
Traceback (most recent call last):
File "dec2.py", line 13, in <module>
some_func(object, foo=0, bar=0)
File "dec2.py", line 4, in single_keyword_dec
raise Exception("More than one initializer passed: {0}".format(kw.keys()))
Exception: More than one initializer passed: ['foo', 'bar']
Если вам нужно различать «foo», «bar», «baz» и некоторые другие ключевые слова, вы можете создать похожий декоратор, который будет принимать список ключевых слов для ограничения, и использовать его так:
Таким образом, это 100% повторное использование кода, без необходимости вводить одно и то же снова и снова, и вы получаете правильные ключевые слова в своей функции, а не какой-то непонятный дикт.