如何打印此列表的实际内容

时间:2011-03-18 10:25:18

标签: oop list python-3.x

代码简短:

class Contact:
    all_contacts = []

    def __init__(self, name, email):
        self.name = name
        self.email = email
        Contact.all_contacts.append(self)


c1 = Contact("Paul", "something@hotmail.com")
c2 = Contact("Darren", "another_thing@hotmail.com")
c3 = Contact("Jennie", "different@hotmail.com")


for i in Contact.all_contacts:
    print(i)

显然,我想要做的就是打印'all_contacts'列表,其中包含我添加的信息,但我得到的是:

<__main__.Contact object at 0x2ccf70>
<__main__.Contact object at 0x2ccf90>
<__main__.Contact object at 0x2ccfd0>

我做错了什么?

3 个答案:

答案 0 :(得分:1)

__repr__的{​​{1}}和__str__方法未定义,因此您将获得此默认字符串表示形式。

Contact

答案 1 :(得分:1)

将以下内容添加到您的Contact类:

class Contact:
    ...
    def __str__(self):
        return '%s <%s>' % (self.name, self.email)

这将告诉Python如何以人类可读的字符串表示形式呈现对象。

Reference information for str

答案 2 :(得分:1)

  1. 将容器与存储在容器中的物品分开。

  2. __str__()添加Contact方法。

    class Contact:
        def __init__(self, name, email):
            self.name = name
            self.email = email
        def __str__(self):
            return "{} <{}>".format(self.name, self.email)
    
    class ContactList(list):
        def add_contact(self, *args):
            self.append(Contact(*args))
    
    c = ContactList()
    c.add_contact("Paul", "something@hotmail.com")
    c.add_contact("Darren", "another_thing@hotmail.com")
    c.add_contact("Jennie", "different@hotmail.com")
    
    for i in c:
        print(i)