在继承 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')
我有一个继承的 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')