Передача дополнительного аргумента в унаследованном классе

У меня есть унаследованный класс, где я пытаюсь использовать дополнительный аргумент (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 ответ

Решение

На данный момент подпись ваша __init__ имеет один позиционный аргумент (language) и один ключевой аргумент (parent). Но затем вы вызываете его, передавая родителю в качестве позиционного аргумента, а язык - в качестве ключевого аргумента. Таким образом, вы в конечном итоге фактически передаете значение языка дважды (отсюда и ошибка).

Я думаю, что было бы более разумно определить ваш класс следующим образом:

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')
Другие вопросы по тегам