繁体   English   中英

将kwargs参数传递给重写方法的最佳方法

[英]best way to pass kwargs arguments to overriden method

我有这样的事情:

MyClass(BaseClass):
    def __init__(self, *args, **kwargs):
        data = kwargs.pop('data', None)
        super(BaseClass, self).__init__(*args, **kwargs)

BaseClass是API包装器的表示形式,它的init方法接收很多参数,例如API_KEY,API_SECRET,OAUTH_TOKEN和OUATH_TOKEN_SECRET。 我的问题是创建MyClass实例的正确或最干净的方法是什么。 我不知道这是否行得通:

if __name__ == '__main__':
    obj = MyClass(
        API_KEY,
        API_SECRET,
        OAUTH_TOKEN,
        OAUTH_TOKEN_SECRET,
        {'data': DATA}
    )

因此,让我们假设它可行,将所有参数打包到dict中并将它们传递给MyClass更好吗?

**kwargs 关键字参数 ,而不是字典:

obj = MyClass(
    API_KEY,
    API_SECRET,
    OAUTH_TOKEN,
    OAUTH_TOKEN_SECRET,
    data=DATA
)

当然,您可以使用**kwargs调用约定使您的字典仍然用作关键字参数:

obj = MyClass(
    API_KEY,
    API_SECRET,
    OAUTH_TOKEN,
    OAUTH_TOKEN_SECRET,
    **{'data': DATA}
)

是否将其余参数打包到关键字参数中,完全取决于BaseClass上的原始方法。 它接受那些参数作为关键字参数吗? 在Python 3中,这不一定是给定的,内置的(C定义的)函数和方法也不总是接受关键字参数而不是位置参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM