Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 27, 2014 15:06:42

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

строковое представление объекта

написал такой класс:

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]]

Отредактировано vrabey (Сен. 27, 2014 15:17:52)

Офлайн

#2 Сен. 27, 2014 15:30:16

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

строковое представление объекта

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

    def __str__(self):
        return '\n'.join(str(row) for row in self)



Офлайн

#3 Сен. 27, 2014 15:35:46

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

строковое представление объекта

Budulianin
спасибо

Офлайн

#4 Сен. 27, 2014 15:36:05

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

строковое представление объекта

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]]



Офлайн

#5 Сен. 27, 2014 18:40:47

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

строковое представление объекта

doza_and
Вроде это очевидно
теперь да
спабибо

Офлайн

#6 Сен. 27, 2014 19:31:06

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

строковое представление объекта

а как создать класс наследник numpy.ndarray?

Офлайн

#7 Сен. 27, 2014 20:44:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

строковое представление объекта

Офлайн

#8 Сен. 28, 2014 02:57:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

строковое представление объекта

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version