Mam klasy Pythona z metodą, która powinna przyjąć argumentów i argumentów kluczowych tędyfunkcja python * args i ** kwargs z innymi określonymi argumentami kluczowych
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>
Dzwoniąc:
plt = plot(x, y)
plt.set_axis("test1", "test2", xlabel="new_x", my_kwarg="test3")
I pojawia się błąd: TypeError: set_axis() got multiple values for keyword argument 'xlabel'
w każdym razie, jeśli mogę ustawić metodę jak
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>
i zadzwonić:
plt = plot(x, y)
plt.set_axis(xlabel="new_x", "test1", "test2", my_kwarg="test3")
uzyskać SyntaxError: non-keyword arg after keyword arg
, jak się spodziewałem. Co jest nie tak w pierwszym przypadku? Jak mam przekazać mojej metodzie akceptowanie argumentów użytkownika i argumentów słów kluczowych, innych niż domyślne? (Mam nadzieję, że moje pytanie jest wystarczająco jasne)
Jakiej wersji Python używasz? Pierwsza klasa, którą wysyłasz, nie parsuje się w Pythonie 2.7.3, ponieważ po '* args' jest następna nazwa parametru w definicji' set_axis'. – phant0m