我开始使用类来创建一个简单的联系人输出,然后是这样的更新版本:
My Contacts
-----------
??? Murphy 555-555-8980
George Smith 555-555-2323
Mike Johnson 555-555-4780
-----------
My Contacts
-----------
Cade Murphy 555-555-8980
President George Smith 555-555-2323
Professor Mike Johnson 555-555-4780
----------
我已经正确地设置了函数,但是我不知道应该把什么放入class Contact
,这样它就可以打印出我想要的内容。你知道吗
class Contact:
# I don't know what to put here
def print_directory(contacts):
print("My Contacts")
print("-----------")
for person in contacts:
print(person)
print("-----------\n")
def main():
champ = Contact("???", "Murphy", "555-555-8980")
president = Contact("George", "Smith", "555-555-2323")
professor = Contact("Mike", "Johnson", "555-555-4780")
contacts = [champ, president, professor]
print_directory(contacts)
champ.set_first_name("Cade")
president.set_title("President")
professor.set_title("Professor")
print_directory(contacts)
main()
我试着看教程和课程文档,但一无所获。任何帮助都将不胜感激,谢谢。你知道吗
如果只想设置属性:
这将动态添加属性
first_name
,其值为Mike
如果您需要一个setter,请将其设置为:
以及
您可能想使用
__init__
,类构造函数,这使得它更加面向对象:然后您可以使用:
如果您想要更多pythonic OO,可以使用setter/getter装饰器:
类联系人(对象):
您可以:
注意:在Python中有一个约定,私有成员的名称以
_
开头,比如_first_name
。这提示outer不应该直接操作这个成员。你知道吗希望这有帮助。你知道吗
小更新: 我认为在Python中,
list
的Contact
表示电话簿在大多数情况下已经足够了,包括需要使用ORM/ODM库将其写入数据库的情况。不需要PhoneBook
类。只是我的想法。你知道吗小更新2: 有人在回答和评论中提到
__str__
,这是一个很好的观点。请看@Bryan Zeng的答案。还有一个叫做__repr__
的东西提供了与__str__
类似的函数。你知道吗这个问题可能有帮助:Difference between __str__ and __repr__ in Python
我推荐一本书“Fluent Python”,它在OO一章中介绍了很多“神奇的函数”(以双下线开始和结束的函数),这对Python的OO编程有很大的帮助。你知道吗
小更新3:修复setter/getter decorator上的错误。我有一段时间没用了,我把它写错了。。。
@setter
应该是@first_name.setter
。很抱歉。你知道吗首先,它需要初始化一个
__init__
函数。你知道吗那么这个类有三个变量。 第二,它需要变成一根弦。你知道吗
在代码中有一个
set_first_name
函数,所以创建一个最后,在代码中有一个
set_title
函数在面向对象编程(OOP)中,类定义具有相关属性的对象。你知道吗
在类中表示联系人的最简单方法是(您猜对了)使用Contact类,但为了保持整洁,我们还将使用Phonebook类:
编辑
正如已经指出的,Python有一个内置的
__str__
方法,我们不需要定义print_info()
。我没有改变我的代码块,因为我想显式解释方法对初学者来说会更好。不过,更合适的方法是先定义__str__
,然后再定义print(contact)
,而不是调用contact.print_info()
。你知道吗相关问题 更多 >
编程相关推荐