python - How to implement interface for submatrix like m[1:3, 0:2] += 1? -


i asked question still can't figure out how implement this.

i have matrix class:

class matrix(list):     def __getitem__(self, item):         try:             return list.__getitem__(self, item)         except typeerror:             rows, cols = item             return [row[cols] row in self[rows]] 

it allows things this:

m = matrix([[i+j j in [0,1,2,3]] in [0,4,8,12]]) print(m[0:2, 0:2]) print: [[0, 1], [4, 5]] 

i want able add/multiply submatrix elements given value, like:

m[0:2, 0:2] += 1 print(m[0:2, 0:2]) should print: [[1, 2], [5, 6]] 

i'm trying implement methods: __add__, __setitem__

def __setitem__(self, key, value):     print(key, value)  def __add__(self, item):     print(item)     in range(self):         j in range(self[0]):             self[i][j] += item 

at least want see print something. doesn't happen. i'm trying such example:

m[1:2, 2:3] = m[1:2, 2:3] + 1 

and error like: typeerror: can concatenate list (not "int") list.

so, i'm not @ magic methods. call fails before. how this?

you have return matrix object "getitem"

class matrix(list):     def __getitem__(self, item):         print "get"         try:             return matrix(list.__getitem__(self, item))         except typeerror:             rows, cols = item             return matrix([row[cols] row in self[rows]])     def __setitem__(self, key, value):         print(key, value)      def __add__(self, item):         print "messi great"         print(item)         # in range(self):         #     j in range(self[0]):         #         self[i][j] += item m = matrix([[i+j j in [0,1,2,3]] in [0,4,8,12]]) print m[1:2, 2:3] m[1:2, 2:3] = m[1:2, 2:3] + 1 

Comments

Popular posts from this blog

scala - 'wrong top statement declaration' when using slick in IntelliJ -

c# - DevExpress.Wpf.Grid.InfiniteGridSizeException was unhandled -

PySide and Qt Properties: Connecting signals from Python to QML -