在继承 class 中传递附加参数

Passing an additional argument in inherited class

我有一个继承的 class,我尝试使用一个额外的参数 (language)。我不确定我必须将此参数放在 __init__.

中的什么位置

调用 class:

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

Class:

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'

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

我认为这样定义 class 更有意义:

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')