在继承的类中传递一个额外的参数

时间:2017-10-22 16:21:41

标签: python-2.7 class pyqt parameter-passing signature

我有一个继承的类,我尝试使用另一个参数(language)。我不确定在__init__内将此论点置于何处。

致电课程:

self.highlighter = Highlighter(self.editor.document(), language='yaml')

类别:

class Highlighter(QSyntaxHighlighter):

    def __init__(self, language, parent=None):
        self.language = language

        super(Highlighter, self).__init__(parent)

        if self.language == 'yaml':
            self.lguge_ymal()

目前,无论我在哪里放置language参数,运行代码时都会出错:

TypeError: __init__() got multiple values for keyword argument 'language'

1 个答案:

答案 0 :(得分:1)

目前,__init__的签名有一个位置参数(language)和一个关键字参数(parent)。但是,然后通过将父项作为postional参数并将语言作为关键字参数传递来调用它。因此,您最终会有效地传递语言值两次(因此错误)。

我认为像这样定义你的类会更有意义:

class Highlighter(QSyntaxHighlighter):
    def __init__(self, parent=None, language=''):    
        super(Highlighter, self).__init__(parent)
        self.language = language
        if self.language == 'yaml':
            self.lguge_ymal()

然后您可以通过以下任何方式使用它们:

self.highlighter = Highlighter(self.editor.document(), language='yaml')
self.highlighter = Highlighter(self.editor.document(), 'yaml')
self.highlighter = Highlighter(self.editor.document())
self.highlighter = Highlighter(language='yaml')