Receiving Arguments via Pointers in Python
I have a class whose function defined like this. My intention is to send multiple argumen开发者_如何转开发ts to it .
For testing, I called it as :class_name("argument1","argument2")
, and it says: __init__accepts atmost 1 arguments , 3 given
def __init__(self, **options):
for name in options:
self.__dict__[name] = options[name]
What is the proper way to handle this ?
Any suggestions welcome......
You want to use one asterisk instead of two. Double asterisks are for named arguments. There is a nice explanation in the python documentation if you are interested in reading further.
def __init__(self, *options):
for name in options:
self.__dict__[name] = name
However, from your code I think the real issue is that you are calling your function incorrectly.
You would want to call it like:
class_name(argument1="some value")
def __init__(self, **options):
for name,val in options.iteritems():
self.__dict__[name] = val
Here is a simpler way to write it
def __init__(self, **options):
vars(self).update(options)
The *
form collects positional arguments:
def __init__(self, *options):
and the **
form collects keyword arguments:
def __init__(self, **options):
You're providing 2 positional arguments plus the instance as self
, but it's defined to expect only 1 positional argument self
.
精彩评论