e.H
, e.A
, e.T
- псевдо-свойства разреженного матричного объекта.
shape
является собственностью. В sparse.base.py
я нахожу
shape = property(fget=get_shape, fset=set_shape)
в то время как dict
содержит только:
In [121]: e.__dict__
Out[121]:
{'_shape': (2, 2),
'data': array([[ 1., 1.]]),
'format': 'dia',
'maxprint': 50,
'offsets': array([0])}
get_shape
вероятно обращается _shape
. set_shape
, вероятно, ограничивает нашу способность изменять _shape
.
Я не знаю, как можно найти все определенные свойства для такого объекта. В идеале они должны быть указаны в документации, но документация sparse
не идеальна.
Существует e.getH
метод, который возвращает то же самое, как e.H
, так что я подозреваю, что есть кусок кода, вероятно, в некоторых суперкласса
H = property(fget=getH)
Неа - в sparse.base.py
я нахожу переопределение __getattr__
, так это совершенно другой механизм (не собственность и не __dict__
):
def __getattr__(self, attr):
if attr == 'A':
return self.toarray()
elif attr == 'T':
return self.transpose()
elif attr == 'H':
return self.getH()
elif attr == 'real':
return self._real()
elif attr == 'imag':
return self._imag()
elif attr == 'size':
return self.getnnz()
else:
raise AttributeError(attr + " not found")
В ipython
я могу принести это с In [152]: e.__getattr__??
или sparse.base??
.
getattr
могут быть использованы для извлечения всех этих атрибутов и свойств (и методы)
In [161]: getattr(e,'shape')
Out[161]: (2, 2)
In [162]: getattr(e,'_shape')
Out[162]: (2, 2)
In [163]: getattr(e,'H')
Out[163]:
<2x2 sparse matrix of type '<type 'numpy.float64'>'
with 2 stored elements in Compressed Sparse Column format>
In [164]: getattr(e,'transpose')
Out[164]:
<bound method dia_matrix.transpose of <2x2 sparse matrix of type '<type 'numpy.float64'>'
with 2 stored elements (1 diagonals) in DIAgonal format>>
С inspect
модуля я могу получить список из members
, например,
[i[0] for i in inspect.getmembers(e)]
но до сих пор не перечислить эти специальные значения, определенные в методе __getattr__
.
Возможно, они переопределили метод '__dir__'. Иногда я использую 'help (e)' и 'e .__ dict__'. Я не уверен в моем ответе, поэтому, я оставлю его в качестве комментария, и пусть другие уточнят. – Bahrom