Я думаю, что один очень простой пример отсутствует во всех ответах, а именно: что делать, когда единственная разница между вариациями метода - это количество аргументов.Ответ по-прежнему заключается в использовании метода с переменным числом аргументов.
Скажем, вы начинаете с метода, который требует использования двух аргументов
def method(int_a, str_b):
print("Got arguments: '{0}' and '{1}'".format(int_a, str_b)
, затем вам необходимо добавить вариант спросто второй аргумент (скажем, потому что целое число является избыточным), решение очень простое:
def _method_2_param(int_a, str_b):
print("Got arguments: '{0}' and '{1}'".format(int_a, str_b))
def _method_1_param(str_b):
print("Got argument: '{0}'".format(str_b))
def method(*args, **kwargs):
if len(args) + len(kwargs) == 2:
return _method_2_param(args, kwargs)
elif len(args) + len(kwargs) == 1:
return _method_1_param(args, kwargs)
else:
raise TypeError("Method requires one or two arguments")
Хорошая особенность этого решения в том, что независимо от того, использовал ли вызывающий код аргументы из ключевых слов или позиционные аргументы до, он все еще будет работать.