'Returns an item, row or slice from the matrix.
For Datasheet[i], returns the row at the given index.
For Datasheet[i,j], returns the value in row i and column j.'

def __getitem__(self, index):

    if isinstance(index, (int, slice)):
        return list.__getitem__(self, index)
    if isinstance(index, tuple):
        (i, j) = index
        if (not isinstance(i, slice)):
            return list.__getitem__(self, i)[j]
        if (not isinstance(j, slice)):
            return [row[j] for row in list.__getitem__(self, i)]
        return Datasheet(rows=(row[j] for row in list.__getitem__(self, i)), fields=((self.fields and self.fields[j]) or self.fields))
    raise TypeError('Datasheet    indices    must    be    int,    tuple    or    slice')
