【问题标题】:Can __setitem__ take 4 arguments including self. Whereever I have looked it can only take 3 arguments including self__setitem__ 可以接受 4 个参数,包括 self.无论我在哪里看,它只能接受 3 个参数,包括 self
【发布时间】:2017-12-18 17:20:33
【问题描述】:
    class Matrix:
  def __init__(self,row,column):
    self._matrix = [[0 for self._row in range(row)] for self._column in range(column)]
  def __len__(self):
    self._r = len(self._matrix)
    self._c = len(self._matrix[0])
    return r , c
  def __add__(self, matrix):
    if ((len(self._matrix)  != len(matrix)) or (len(self._matrix[0]) != len(matrix[0]))):
      print('Dimentions don\'t agree')
    for i in range(self._row):
      for j in range(self._column):
        self._matrix[i][j] = self._matrix[i][j] + matrix[i][j]
  def __getitem__(self, i, j):
    return self._matrix[i][j]
  def __setitem__(self, i, j, val):
    self._matrix[i][j] = val    
  def __str__(self):
    for row in self._matrix:
      self._string += (''.join([str(elem) for elem in row]))
    return self._string
if __name__ == '__main__':
    m1 = Matrix(2,3)
    m2 = Matrix(2,3)
    for i in range(2):
      for j in range(3):
        m1[i,j] = 1
    for i in range(2):
      for j in range(3):
        m2[i,j] = 2
    m1 = m1 + m2

我是 python 的新手,正在阅读一本书来理解这些概念。我经历了多态性并试图实现一个使用名为矩阵的概念的类,它可以创建、设置项目、添加和对矩阵对象执行一些操作。我没有被困住,因为我需要我的 setitem 函数来删除 self 的 3 个参数,但是在我正在关注的书中以及互联网上的其他任何地方,除了 self 之外,每个人都使用了 2 个参数作为 setitem。我能做些什么来解决这个问题? This is the error

【问题讨论】:

标签: python python-3.x oop operator-overloading


【解决方案1】:

__setitem__ 只接受 3 个参数:selfindexvalue

为了让您的代码更清晰,您需要这样做:

def __getitem__(self, index):
    i, j = index
    return._matrix[i][j]

def __setitem__(self, index, value):
    i, j = index
    self._matrix[i][j] = value

这是使用您当前的语法(例如m1[i, j])执行您尝试编程的方式。

您可以找到更多文档化的答案right there

虽然在你的代码中会有更多的问题不相关与你的问题(索引超出范围),我会让你一个人解决这个问题。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2015-08-21
    • 2015-06-17
    • 2013-12-25
    • 2022-01-21
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多