__setitem__可以包含4个参数,包括self。无论我看到它,它只能包含3个参数,包括自我

时间:2017-12-18 17:20:34

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

    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的新手,读一本书来理解这些概念。我经历了多态,并尝试实现一个类,该类使用名为matrices的概念,它可以创建,设置项,添加并对矩阵对象执行一些操作。我没有被困住,因为我需要我的setitem功能有3个参数去除自我,但在我关注的书和互联网上的其他地方,每个人都使用2个参数除了自己的setitem。我该怎么做才能解决这个问题? This is the error

1 个答案:

答案 0 :(得分:0)

__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

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