python - 将列表传递给构造函数,错误的参数数量错误

时间:2018-03-07 10:47:06

标签: python list constructor arguments

我将一个列表传递给构造函数,但是python将这些视为单独的参数:

def __init__(self, a_parent, a_items):
    super.__init__(self, a_parent)
    self._parent = a_parent
    self._layout = QHBoxLayout()
    self._combo = QComboBox()
    for item in a_items:
        self._combo.addItem(item)
    self._layout.addWidget(self._combo)
    self.setLayout(self._layout)
    self.setWindowModality(Qt.WindowModal)
    self.setWindowTitle("Select Review Topic")
    self.setGeometry(300, 300, 300, 50)
    self._combo.currentIndexChanged.connect(self.index_changed)

和电话:

def select_topic(self):
    topics = ['one', 'two', 'three']
    self.topic_selection_window = SelectTopic(self, self.centralWidget(), topics)
    self.topic_selection_window.show()

返回错误:

TypeError: __init__() takes 3 positional arguments but 4 were given

对于我的生活,我看不到它!

1 个答案:

答案 0 :(得分:0)

这一行错了:

self.topic_selection_window = SelectTopic(self, self.centralWidget(), topics)

那个附加论点的来源。您已将self传递给SelectTopic.__init__()。您不必这样做,因为该方法将隐含地传递给self下的值。

为了澄清,这些是__init__()从您的电话中获得的值:

  1. SelectTopic
  2. 的一个实例
  3. 您在self下传递给它的对象
  4. self.centralWidget()
  5. 的返回值
  6. topics
  7. 下的值

    这就是为什么它抱怨得到4个参数而不是3个。

    我们正在谈论的界限应该是这样的:

    self.topic_selection_window = SelectTopic(self.centralWidget(), topics)
    

    如果您想更多地了解self的工作原理,this article is a great start