尝试创建继承自Python列表

时间:2015-09-01 20:18:57

标签: python list inheritance

我正在创建一个继承自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。

2 个答案:

答案 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)这样的参数签名将namecolors指定为keyword-only arguments。这只能在Python 3中实现。如果您希望代码与Python 2一起使用,则需要将*args移动到参数列表的末尾(并接受以位置方式传递的参数将填入{{1} }和name)。