我有这样的事情:
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?
答案 0 :(得分: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定义的)函数和方法也不总是接受关键字参数而不是位置参数。