python - читаемый список объектов - PullRequest
5 голосов
/ 14 января 2009

Это, вероятно, довольно часто задаваемый вопрос, но я мог бы помочь с этим. У меня есть список объектов класса, и я пытаюсь выяснить, как заставить его печатать элемент из этого класса, а не выводить его в;

<__main__.evolutions instance at 0x01B8EA08>

но вместо этого показать выбранный атрибут выбранного объекта класса. Кто-нибудь может помочь с этим?

Ответы [ 5 ]

8 голосов
/ 14 января 2009

Если вы хотите просто отобразить определенный атрибут каждого экземпляра класса, вы можете сделать

print([obj.attr for obj in my_list_of_objs])

Что выведет атрибут attr каждого объекта в списке my_list_of_objs. Кроме того, вы можете определить метод __str__() для вашего класса, который определяет, как преобразовать ваши объекты в строки:

class evolutions:
    def __str__(self):
        # return string representation of self

print(my_list_of_objs)  # each object is now printed out according to its __str__() method
4 голосов
/ 14 января 2009

Вы захотите переопределить метод вашего класса "в строку":

class Foo:
    def __str__(self):
        return "String representation of me"
4 голосов
/ 14 января 2009

Извлечение методов __str __ () и __repr __ ().

См. http://docs.python.org/reference/datamodel.html#object.__repr__

2 голосов
/ 14 января 2009

Вам нужно переопределить методы __str__ или __repr__ вашего объекта [s]

1 голос
/ 29 апреля 2009

Я предпочитаю определять функцию __repr__, которая может реконструировать объект (когда это возможно). Если у вас нет __str__, то и repr(), и str() будут вызывать этот метод.

Так например

class Foo(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def __repr__(self):
        return 'Foo(%r, %r)' % (self.a, self.b)

Делая это таким образом, вы получаете читаемую строковую версию, и в качестве бонуса она может быть оценена для получения копии исходного объекта.

x = Foo(5, 1 + 1)
y = eval(str(x))

print y
-> Foo(5, 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...