Я пытаюсь создать 2D-массивы в python с использованием c-типов. Для этого я создал два модуля arrays.py и array2D.pyAttributeError: экземпляр Array не имеет атрибута '__trunc__'
TraceBack является:
Traceback (most recent call last):
File "C:\Python27\Lib\array2D.py", line 52, in <module>
arr = Array2D(2,4)
File "C:\Python27\Lib\array2D.py", line 15, in __init__
self._theRows[i] = arrays.Array(numCols)
File "C:\Python27\Lib\arrays.py", line 37, in __setitem__
self._elements[ index ] = value
AttributeError: Array instance has no attribute '__trunc__'
Код
модуль arrays.py
import ctypes
class Array:
#Creates an array with size elements.
def __init__(self, size):
assert size > 0, "Array size must be > 0"
self._size = size
print "sixe is %s" %self._size
# Create the array structure using the ctypes module.
PyArrayType = ctypes.c_int * size
self._elements = PyArrayType()
print "type is e", type(self._elements)
#self._elements = ctypes.c_int * size
# Initialize each element.
#for i in range(self._size):
#self.clear(i)
# Returns the size of the array.
def __len__(self):
return self._size
# Gets the contents of the index element.
def __getitem__(self, index):
assert index >= 0 and index < len(self), "Array subscript 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 subscript out of range"
print "Type is ", type(index)
f._index = (index)
self._elements[ index ] = value
# Clears the array by setting each element to the given value.
def clear(self, value):
for i in range(len(self)) :
self._elements[i] = value
array2D .py
import 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 = arrays.Array(numRows)
# Create the 1-D arrays for each row of the 2-D array.
for i in range(numRows) :
self._theRows[i] = arrays.Array(numCols)
# Returns the number of rows in the 2-D array.
def numRows(self):
return len(self._theRows)
# Returns the number of columns in the 2-D array.
def numCols(self):
return len(self._theRows[0])
# Clears the array 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 subscript out of range."
the1dArray = self._theRows[row]
return the1dArray[col]
# Sets the contents of the element at position [i,j] to value.
def __setitem__(self, ndxTuple, value):
assert len(ndxTuple) == 3, "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
Forming the 2d array using the following line
arr = Array2D(2,4)
print "arr is %s" %arr
Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю неправильно здесь?
Это не очень хорошая идея, чтобы поставить свои собственные модули в папку, где стандартная библиотека Python является. –
Спасибо, что сообщили мне о Джанне. Я изменю это. – Bharath