Форум сайта python.su
23
написал такой класс:
class Matrix(list): def __init__(self): super(Matrix, self).__init__() self.size = 5 def init_field(self): line = [0] * self.size self.extend([line[:] for _ in range(self.size)])
[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
Отредактировано vrabey (Сен. 27, 2014 15:17:52)
Офлайн
33
Если скобки необязательно:
def __str__(self): return '\n'.join(str(row) for row in self)
Офлайн
23
Budulianin
спасибо
Офлайн
253
vrabey:)
что бы получить вывод как в numpy
import numpy as np from UserList import UserList as ul class Matrix(ul): def __init__(self): super(Matrix, self).__init__() self.size = 5 self.init_field() def init_field(self): line = [0] * self.size self.extend([line[:] for _ in range(self.size)]) def __str__(self): return str(np.array(self)) >>> obj=Matrix() >>> print obj [[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
Офлайн
23
doza_andтеперь да
Вроде это очевидно
Офлайн
23
а как создать класс наследник numpy.ndarray?
Офлайн
253
Это не очень просто.
http://docs.scipy.org/doc/numpy/user/basics.subclassing.html
Офлайн
857
vrabeyТуда можно поместить любой код, он не обязан быть однострочным. Главное условие - функция должна возвращать строку.
Какой код надо поместить в метод __str__
>>> def func(m): ... out = '[' ... first = True ... for i in m: ... if first: ... first = False ... else: ... out += '\n ' ... out += str(i).replace(',', '') ... out += ']' ... return out ... >>> class A: ... ... lst = [[1, 2, 3], [4, 5, 6]] ... ... __str__ = lambda self: func(self.lst) ... >>> a = A() >>> print(a) [[1 2 3] [4 5 6]] >>>
Отредактировано py.user.next (Сен. 28, 2014 03:22:29)
Офлайн