Ho una classe Python con un metodo che dovrebbe accettare argomenti e argomenti a parola chiave in questo modofunzione Python * args e kwargs ** con altri argomenti chiave specificate
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>
al momento della chiamata:
plt = plot(x, y)
plt.set_axis("test1", "test2", xlabel="new_x", my_kwarg="test3")
ottengo l'errore: TypeError: set_axis() got multiple values for keyword argument 'xlabel'
Comunque se ho impostato il mio metodo come
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>
e chiamare:
plt = plot(x, y)
plt.set_axis(xlabel="new_x", "test1", "test2", my_kwarg="test3")
ottengo SyntaxError: non-keyword arg after keyword arg
, come mi aspettavo. Cosa c'è di sbagliato nel primo caso? Come dovrei dire al mio metodo di accettare qualsiasi argomento utente e argomento di parole chiave, oltre a quelli predefiniti? (Spero che la mia domanda è abbastanza chiaro)
Quale versione di Python stai usando? La prima classe che hai elencato non viene analizzata in Python 2.7.3 poiché '* args' è sostituito da un nome parametro nella definizione 'set_axis'. – phant0m