python - 如何修复 AttributeError:“Matrix”对象没有“clear”属性?
问题描述
我正在尝试创建一个 Matrix 类。但是,当我创建它时它会给我带来错误。
我试图删除 self._theGrid.clear(0) 但矩阵将被初始化为 None 而不是 0。
from array_ import Array2D
class Matrix :
# Creates a matrix of size numRows x numClos initialized to 0.
def __init__(self, numRows, numCols):
self._theGrid = Array2D(numRows, numCols)
self._theGrid.clear(0)
....
在我创建的模块中。我正在使用以下模块来创建矩阵。
# Implement the Array ADT using the array capabilities of the ctypes module
import ctypes
class Array:
# Create array with the size elements
def __init__(self, size):
assert size > 0, "Array size must be > 0"
self._size = size
# Create the array structure using ctypes module
PyArrayType = ctypes.py_object * size
self._elements = PyArrayType()
# Initialize each element
self.clear(None)
# Returns the size of the array
def __len__(self):
return self._size
# Get the contents of the index element
def __getitem__(self, index):
assert index >= 0 and index < len(self), "Array subscripts out of range"
return self._elements[index]
# Puts the value in the array element at index position.
def __setitem__(self, index, value):
assert index >= 0 and index < len(self), "Array subscripts out of range"
self._elements[index] = value
# Clear the array by setting each element to the given value.
def clear (self, value):
for i in range(len(self)):
self._elements[i] = value
# Returns the array's ierator for transversing the elements.
def __iter__(self):
return _ArrayIterator( self._elements )
# An iterator for the Array ADT.
class _ArrayIterator:
def __init__(self, theArray):
self._arrayRef = theArray
self._curNdx = 0
def __iter__(self):
return self
def __next__(self):
if self._curNdx < len(self._arrayRef):
entry = self._arrayRef[self._curNdx]
self._curNdx += 1
return entry
else:
raise StopIteration
# Implementation of the Array2D ADT using an array of arrays
class Array2D:
# Creates a 2-D array of size numRows x numCols
def __init__(self, numRows, numCols):
# Create a 1-D array to store an array reference for each row.
self._theRows = Array(numRows)
# Create the 1-D arrays for each row of the 2-D array.
for i in range(numRows):
self._theRows[i] = Array(numCols)
# Return the number of rows of the 2-D array.
def numRows(self):
return len(self._theRows)
# Return the number of columns of the 2-D array.
def numCols(self):
return len(self._theRows[0])
# Clear the arrays by setting every element to the given value
def clear(self, value):
for row in range(self.numRows()):
row.clear(value)
# Gets the contents of the element at position [i,j]
def __getitem__(self, ndxTuple):
assert len( ndxTuple ) == 2, "Invalid number of array subscripts"
row = ndxTuple[0]
col = ndxTuple[1]
assert row >= 0 and row < self.numRows() and col >=0 and col < self.numCols(), "Array subscripts out of range"
the1dArray = self._theRows[row]
return the1dArray[col]
# Set the contents of the element at position [i,j] to value.
def __setitem__(self, ndxTuple, value):
assert len( ndxTuple ) == 2, "Invalid number of array subscripts"
row = ndxTuple[0]
col = ndxTuple[1]
assert row >= 0 and row < self.numRows() and col >=0 and col < self.numCols(), "Array subscript out of range"
the1dArray = self._theRows[row]
the1dArray[col] = value
我无法得到所有矩阵条目都初始化为 0 的结果。
第 8 行,在init self._theGrid.clear(0)
第 77 行,在 clear row.clear(value) 中
AttributeError:“矩阵”对象没有属性“清除”
我无法用 x = Matrix(2,3) 初始化矩阵。
解决方案
您似乎在这里迭代数组的长度:
...
def clear( self, value ):
for row in range( self.numRows() ): # row is 0, 1, 2, ...
row.clear( value ) # int has no method or attribute with name "clear" -> error is raised
...
尝试遍历数组:
...
def clear( self, value ):
for row in self._theRows:
row.clear( value )
...
推荐阅读
- azure-data-factory - 在 Azure 数据工厂映射数据流中使用参数化数据集
- vb.net - 为什么每次更改代码时都必须重新构建 VB.Net 2015 项目?
- java - 更改密码 if, else 功能
- swift - 为什么 Swift 编译器不能推断带有关联项的协议的返回类型?
- python - Django:按模型参数和计数分组
- encryption - OpenSSL:在 RSA 中使用私钥加密并使用公钥解密
- python - 按 2 个计数过滤 Pandas 数据框
- c# - 使用带有 HTTPWEBREQUEST 的 JSON 字符串发送文件时获取 System.Security.SecurityException
- javascript - 我如何以及何时在 React 组件中使用 useReducer?
- java - 房间数据库架构更新