【问题标题】:Passing an additional argument in inherited class在继承的类中传递附加参数
【发布时间】:2018-04-03 05:42:25
【问题描述】:

我有一个继承类,我尝试使用附加参数 (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'

【问题讨论】:

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


    【解决方案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')
    

    【讨论】:

      猜你喜欢
      • 2020-02-07
      • 2019-09-25
      • 2014-12-25
      • 2014-06-05
      • 2018-05-25
      • 2011-12-28
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多