2012-05-26 5 views
4

Я смотрел на исходный код Джанго сегодня, и я это заметил:Зачем принимать кварты, но не использовать их?

class DjangoTestSuiteRunner(object): 
    def __init__(self, verbosity=1, interactive=True, failfast=True, **kwargs): 
     self.verbosity = verbosity 
     self.interactive = interactive 
     self.failfast = failfast 

Почему они принимают kwargs в конструкторе, но потом ничего не делать с ними?

ответ

9

Этот шаблон может упростить совместимость в обратном направлении. Если более новая/более старая версия кода имеет больше/меньше параметров, вы не будете сломать все.

Кроме того, когда вы наследуете этот класс (например, с mixins), может быть удобно просто принять все.

Imho это не симпатичный шаблон для использования, но он работает.

+2

Есть также некоторые убедительные связанные причины, когда часть дерева с множественным наследованием использует 'super()' - если кто-то из дерева хочет принять аргумент ключевого слова, _everyone_ должен иметь возможность получить его без привлечения исключения , –

Смежные вопросы