2012-05-26 51 views
4

我今天在看Django的源代碼,我注意到了這一點:爲什麼接受kwargs但不使用它們?

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

爲什麼他們會接受在構造kwargs但後來不跟他們做什麼?

回答

9

此模式可以使向後/向前兼容性更容易。 如果代碼的更新/舊版本具有更多/更少的參數,那麼您不會破壞所有內容。另外,當你繼承這個類時(比如用mixin),只需接受所有東西就可以很方便。

Imho這不是一個漂亮的模式使用,但它的工作原理。

+2

當使用'super()'的多重繼承樹的一部分時,還有一些令人信服的相關原因 - 如果樹中的某個人想要接受關鍵字參數,_everyone_必須能夠接收它而不會引發異常。 –

相關問題