为什么接受kwargs但不使用它们?

Zam*_*nji 4 python django kwargs

我今天看着Django源代码,我注意到了这一点:

class DjangoTestSuiteRunner(object):
    def __init__(self, verbosity=1, interactive=True, failfast=True, **kwargs):
        self.verbosity = verbosity
        self.interactive = interactive
        self.failfast = failfast
Run Code Online (Sandbox Code Playgroud)

为什么他们会在构造函数中接受kwargs但是却不对它们做任何事情?

Wol*_*lph 9

此模式可以使向后/向前兼容性更容易.如果较新/较旧版本的代码具有更多/更少的参数,那么您将不会破坏所有内容.

此外,当您继承此类时(例如使用mixins),只需接受所有内容即可.

Imho它不是一个漂亮的模式,但它的工作原理.

  • 当使用`super()`的多继承树的一部分时,还有一些令人信服的相关原因 - 如果树中的某个人想要接受关键字参数,_everyone_必须能够在不引发异常的情况下接收它. (2认同)