I have looked up similar questions, yet most problems are related to omitting the self
argument in the __init__
definition.
Code:
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)
However here my code was working fine before I added the "optionsdic" to the class. After adding it I get the type error in the title. Am I using **kwargs
incorrectly as an argument?
答案 0 :(得分:8)
You need to use **
to apply optionsdic
as keyword arguments:
testurl = steamurl("IDOTA2Match_570", "GetMatchHistory", "v001", **optionsdic)
otherwise it is just another positional argument passing in a dictionary object.
This mirrors the syntax in the function signature.
答案 1 :(得分:7)
If you want to pass the contents of optionsdic
as separate keyword arguments, you need to use **
unpacking:
testurl = steamurl("IDOTA2Match_570", "GetMatchHistory", "v001", **optionsdic)
答案 2 :(得分:4)
You should call using **
:
testurl = steamurl("IDOTA2Match_570", "GetMatchHistory", "v001", optionsdic)
This will unpack the dictionary into separate keyword arguments. In __init__
the keyword arguments will then be packed into a dictionary due to **options
.