访问 Matrix 的元素

问题描述 投票:0回答:1

帮助我使用没有

numpy
的属性实现矩阵元素的访问和更改。我是初学者)

我想做什么

class Matrix: 

    def __init__(self, matrix=[[0] * 3 for i in range(3)], n = 0, m = 0, element = 0): 

        self.matrix = matrix 

        self.n = len(matrix) 

        self.m = len(matrix[0]) 

        self.element = element
@property 

def element(self, i, j): 

  return self.__matrix[i][j] 

@element.setter 

def element(self, i, j, new_value): 

  print("{}".format(new_value)) 

  self.__matrix[i][j] = new_value

matrix2 = Matrix([[1,5],[3,3]]) 

print(matrix2.element(1,1).matrix)

matrix2.element(2, 1) = 3 

print(matrix2.element)

结果出错了

python class matrix setter
1个回答
0
投票

首先让我们以简单的方式做到这一点,使用方法:

class Matrix:

  def __init__(self, matrix=[[0] * 3 for i in range(3)], n = 0, m = 0): 
      self.matrix = matrix 
      self.n = len(matrix) 
      self.m = len(matrix[0]) 

  def getitem(self, i, j):
      return self.matrix[i][j]
  
  def setitem(self, i, j, value):
    self.matrix[i][j] = value
    



matrix2 = Matrix([[1,5],[3,3]])

print(matrix2.getitem(1,1))

matrix2.setitem(1, 1, 5)

要使用

getitem
,我们需要传递索引。要使用
setitem
,我们需要同时传递索引和新值。

Python 提供具有内置索引功能的相同方法

__getitem__
__setitem__
。通过使用
__getitem__
__setitem__
而不是
getitem()
setitem()
,我们可以利用 Python 的内置索引功能来访问和修改 Matrix 对象的元素。

因此:

class Matrix:

  def __init__(self, matrix=[[0] * 3 for i in range(3)], n = 0, m = 0): 
      self.matrix = matrix 
      self.n = len(matrix) 
      self.m = len(matrix[0]) 

  def __getitem__(self, index):
      i, j = index
      return self.matrix[i][j]
  
  def __setitem__(self, index, value):
    i, j = index
    self.matrix[i][j] = value
    print(self.matrix)

  def __str__(self):
    return str(self.matrix)



matrix2 = Matrix([[1,5],[3,3]])

print(matrix2[1, 1])

matrix2[1, 1] =5

print(matrix2)
© www.soinside.com 2019 - 2024. All rights reserved.