代码简短:
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>
我做错了什么?
答案 0 :(得分:1)
__repr__
的{{1}}和__str__
方法未定义,因此您将获得此默认字符串表示形式。
Contact
答案 1 :(得分:1)
将以下内容添加到您的Contact类:
class Contact:
...
def __str__(self):
return '%s <%s>' % (self.name, self.email)
这将告诉Python如何以人类可读的字符串表示形式呈现对象。
答案 2 :(得分:1)
将容器与存储在容器中的物品分开。
向__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)