-1

我有这样的事情:

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 更好吗?

4

1 回答 1

3

**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 定义)函数和方法也不总是接受关键字参数而不是位置参数。

于 2013-06-26T16:46:58.343 回答