Найти - Пользователи
Полная версия: строковое представление объекта
Начало » Python для новичков » строковое представление объекта
1
vrabey
написал такой класс:
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)])

вопрос:
1. Какой код надо поместить в метод __str__ что бы получить вывод как в numpy
[[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]]

Budulianin
Если скобки необязательно:

    def __str__(self):
        return '\n'.join(str(row) for row in self)
vrabey
Budulianin
спасибо
doza_and
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]]
vrabey
doza_and
Вроде это очевидно
теперь да
спабибо
vrabey
а как создать класс наследник numpy.ndarray?
doza_and
Это не очень просто.
http://docs.scipy.org/doc/numpy/user/basics.subclassing.html
py.user.next
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]]
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB