I have a Python class with a method which should accept arguments and keyword arguments this way
class plot:
def __init__(self, x, y):
self.x = x
self.y = y
def set_axis(self, *args, xlabel="x", ylabel="y", **kwargs):
for arg in args:
<do something>
for key in kwargs:
<do somethng else>
when calling:
plt = plot(x, y)
plt.set_axis("test1", "test2", xlabel="new_x", my_kwarg="test3")
I get the error: TypeError: set_axis() got multiple values for keyword argument 'xlabel'
Anyway if I set my method like
class plot:
def __init__(self, x, y):
self.x = x
self.y = y
def set_axis(self, xlabel="x", ylabel="y", *args, **kwargs):
for arg in args:
<do something>
for key in kwargs:
<do somethng else>
and call:
plt = plot(x, y)
plt.set_axis(xlabel="new_x", "test1", "test2", my_kwarg="test3")
I get SyntaxError: non-keyword arg after keyword arg
, as I was expecting.
What is wrong with the first case? How should I tell my method to accept any user argument and keyword argument, other than the default ones? (Hope my question is clear enough)
In Python 3 this works:
Python 3.2.3 (default, Oct 19 2012, 19:53:16)
>>> def set_axis(self, *args, xlabel="x", ylabel="y", **kwargs):
... print(args, xlabel, ylabel, kwargs)
...
>>> set_axis(None, "test1", "test2", xlabel="new_x", my_kwarg="test3")
('test1', 'test2') new_x y {'my_kwarg': 'test3'}
>>>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With