【发布时间】:2012-12-09 20:21:37
【问题描述】:
我有一个 Python 类,它的方法应该以这种方式接受参数和关键字参数
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>
调用时:
plt = plot(x, y)
plt.set_axis("test1", "test2", xlabel="new_x", my_kwarg="test3")
我收到错误:TypeError: set_axis() got multiple values for keyword argument 'xlabel'
无论如何,如果我将我的方法设置为
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>
然后调用:
plt = plot(x, y)
plt.set_axis(xlabel="new_x", "test1", "test2", my_kwarg="test3")
正如我所料,我收到了SyntaxError: non-keyword arg after keyword arg。
第一种情况有什么问题?我应该如何告诉我的方法接受任何用户参数和关键字参数,而不是默认参数? (希望我的问题足够清楚)
【问题讨论】:
-
您使用的是什么版本的 Python?您列出的第一个类在 Python 2.7.3 中无法解析,因为
*args后面是set_axis定义中的参数名称。
标签: python python-2.7 methods args keyword-argument