ошибка печати python

Возможный дубликат:
Python __str__ и списки

В чем причина, когда python печатает адрес объекта вместо самого объекта?

например, вывод инструкции печати таков:

[< ro.domain.entities.Person object at 0x01E6BA10>, < ro.domain.entities.Person object at 0x01E6B9F0>, < ro.domain.entities.Person object at 0x01E6B7B0>]

Мой код выглядит так:

class PersonRepository:
    """
    Stores and manages person information.
    """
    def __init__(self):
        """
        Initializes the list of persons.
        """
        self.__list=[]

    def __str__(self):
       """
       Returns the string format of the persons list.
       """
       s=""
       for i in range(0, len(self.__list)):
            s=s+str(self.__list[i])+"/n"
       return s

    def add(self, p):
        """
        data: p - person.
        Adds a new person, raises ValueError if there is already a person with the given id.
        pos: list contains new person.
        """
        for q in self.__list:
            if q.get_personID()==p.get_personID():
                raise ValueError("Person already exists.")
        self.__list.append(p)

    def get_all(self):
        """
        Returns the list containing all persons.
        """
        l=str(self.__list)
        return l

У меня также есть класс Person с функцией get_personID(). После того, как я добавил некоторые элементы и попытался распечатать их с помощью get_all(), он возвращает указанную выше строку вместо людей, которых я добавил.


person user1796659    schedule 13.01.2013    source источник
comment
некоторый код был бы полезен...   -  person jgr    schedule 13.01.2013
comment
И какова была ваша команда печати? Как вы получили объект?   -  person Sudipta Chatterjee    schedule 13.01.2013


Ответы (2)


Вы смотрите на представление repr() пользовательского класса, которое по умолчанию включает id() (== адрес памяти в CPython).

Это значение по умолчанию, используемое при печати списка, любое содержимое включается с использованием представления:

>>> class CustomObject(object):
...     def __str__(self):
...         return "I am a custom object"
... 
>>> custom = CustomObject()
>>> print(custom)
I am a custom object
>>> print(repr(custom))
<__main__.CustomObject object at 0x10552ff10>
>>> print([custom])
[<__main__.CustomObject object at 0x10552ff10>]
person Martijn Pieters    schedule 13.01.2013

Python вызывает для каждого элемента списка вывод repr() для каждого элемента списка.

См. Python __str__ и списки.

person Andreas Jung    schedule 13.01.2013