我正在创建一个继承自Python列表的小类。
class palette(list):
def __init__(
self,
*args,
name = None, # string name
colors = None, # list of colors
):
super().__init__(self, *args)
self._name = name
self.extend(colors)
当我运行它时,我在初始化函数的name
参数处得到语法错误。为什么是这样?我该如何解决?我正在使用Python 2和3。
答案 0 :(得分:4)
*args
必须在之后其他参数,而不是在它们之前或之中。 (至少在Python 2中。)
所以这是有效的:
def myfunc(foo, bar, *args):
pass
但这不是:
def myfunc(foo, *args, bar):
pass
-
正如@Padraic Cunningham在评论中指出的,还要注意你有第二个语法错误:colors = None
之后的尾随逗号。您对super()
的调用将在运行时失败。您可能需要super(palette, self).__init__(*args)
。
答案 1 :(得分:0)
像func(self, *args, name=None, colors=None)
这样的参数签名将name
和colors
指定为keyword-only arguments。这只能在Python 3中实现。如果您希望代码与Python 2一起使用,则需要将*args
移动到参数列表的末尾(并接受以位置方式传递的参数将填入{{1} }和name
)。