2015-05-04 3 views
0

Я искал похожие вопросы, но большинство проблем связано с отсутствием аргумента self в определении __init__.ТипError: __init __() принимает 4 позиционных аргумента, но 5 дано

Код:

class steamurl(): 

    baseurl = "http://api.steampowered.com/{0}/{1}/{2}/" 

    def __init__(self, loc1, loc2, vnum, **options): 
     self.loc1 = loc1 
     self.loc2 = loc2 
     self.vnum = vnum 
     self.options = options 

optionsdic = { 
    'key': 'KEYHERE', 
    'game_mode': 'all_pick', 
    'min_players': '7' 
    } 

testurl = steamurl("IDOTA2Match_570", "GetMatchHistory", "v001", optionsdic) 

Однако здесь мой код работает отлично, прежде чем я добавил «optionsdic» классу. После добавления я получаю ошибку типа в заголовке. Использую ли я **kwargs как аргумент?

ответ

8

Вы должны использовать ** применять optionsdic в качестве ключевых слова аргументов:

testurl = steamurl("IDOTA2Match_570", "GetMatchHistory", "v001", **optionsdic) 

иначе это просто еще один аргумента позиционного переходящего в словаре объекта.

Это отражает синтаксис в сигнатуре функции.

4

Вы должны вызвать с помощью **:

testurl = steamurl("IDOTA2Match_570", "GetMatchHistory", "v001", optionsdic) 

Это будет распаковать словарь в отдельных ключевых аргументов. В __init__ аргументы ключевого слова будут затем упакованы в словарь из-за **options.

7

Если вы хотите передать содержимое optionsdic в виде отдельных ключевых аргументов, необходимо использовать **unpacking:

testurl = steamurl("IDOTA2Match_570", "GetMatchHistory", "v001", **optionsdic)