Лучший способ передать аргументы kwargs переопределенному методу
У меня есть что-то вроде этого:
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?
1 ответ
**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) функции и методы всегда принимают аргументы ключевого слова вместо позиционных аргументов.