2

可能重复:
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

我也有一个带有 get_personID() 函数的 Person 类。在我添加了一些元素并尝试使用 get_all() 打印它们之后,它返回上面的行,而不是我添加的人员。

4

2 回答 2

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>]
于 2013-01-13T12:14:18.780 回答
0

Python 为每个列表项调用每个列表项的repr () 输出。

请参阅Python __str__ 和列表

于 2013-01-13T12:14:42.467 回答