LINUX.ORG.RU

Как в python вернуть рефку?

 , ,


0

2
class Matrix(object):
    def __init__(self, rows, cols):
        self.rows = rows
        self.cols = cols
        self._m = [[0] * cols for _ in range(rows)]

    def print(self):
        print(self._m)

    def get(self, i, j):
        return self._m[i][j]


m = Matrix(2, 3)
m.get(0, 0) = 123 # хочу так

Сабж. Как это сделать? Как вернуть рефку?


Пока остановился на этом:

...
    def get(self):
        return self._m


m = Matrix(2, 3)
m.get()[0][0] = 123
Еще есть варианты? Хочется контролировать индексы.

driver
() автор топика

«Рефку» вернуть невозможно. Но можно реализовать __setitem____getitem__, естественно).

Пока остановился на этом:

Не делай так.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Годнота! Спасибо. Получилось вот так:


class Matrix(object):
    def __init__(self, rows, cols):
        self.rows = rows
        self.cols = cols
        self._m = [[0] * cols for _ in range(rows)]

    def __repr__(self):
        return str(self._m)

    def __setitem__(self, ij, value):
        i, j = ij
        self._m[i][j] = value

    def __getitem__(self, ij, j):
        i, j = ij
        return self._m[i][j]


m = Matrix(2, 3)
m[0, 0] = 123
print(m)

driver
() автор топика
Ответ на: комментарий от driver

Лишний аргумент в __getitem__ забыл убрать после копипасты :)

driver
() автор топика
Ответ на: комментарий от tailgunner

Учебное. Я пока до numpy не добрался.

driver
() автор топика
Ответ на: комментарий от tailgunner

я категорически не согласен 100-200-300-500-строчные велосипеды полезно и нужно делать

tz4678 ★★
()
Matrix(object)
range(rows)

что то одно из этого. в python3 не нужно наследоваться от object, в python2 нужно использовать xrange

[[0] * cols for _ in range(rows)]

почему не

[[0] * cols] * rows

?

eternal_sorrow ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.