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

问题描述 投票:-1回答:1
    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

python python-3.x oop operator-overloading
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.