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