0

我需要创建一个由两个类组成的程序;一个“人”类和一个“朋友”类。person 类必须具有属性(first_name、last_name、phone_number)。“朋友”类必须有出生日期和电子邮件
应用程序将向用户显示一个主菜单,允许用户添加联系人、按姓名查找联系人或退出应用程序。
我在这里
找到了一个很好的指南 我不知道如何通过多个类来完成这个。我参加了为期 5 周的课程,教科书毫无帮助。如果有人可以请带我走,我将不胜感激!
这是我现在拥有的:

class person:
    def information:
        first = print(input("first: ")
        last = print(input("last: ")
        number = print(input("phone number: ")
 class friend:
     def friendinfo:
         email = print(input("email: ")
         birthday = print(input("birthday: ")

当用户选择添加联系人时,应用程序会询问用户是否要添加普通人或朋友。如果用户想要添加一个新的常规联系人,那么应用程序将询问该人的名字、姓氏、姓名和电话号码。
如果用户想要添加一个新的朋友联系人,那么应用程序将询问用户的名字、姓氏、电话号码、电子邮件地址和出生日期。当用户选择按姓名查找联系人时,应用程序将询问用户的姓氏,然后应用程序将显示具有该姓氏的所有联系人的完整信息。

4

3 回答 3

4

上课笔记

一个类就像一个事物的蓝图。当你创建一个类时,你只是在制作一个蓝图,就像为一座建筑物绘制建筑计划一样。然而,该建筑尚未建成。您还可以采用这些计划并创建大量以相同方式形成的建筑物(我住在南加州,这是一个非常面向 OOP 的地方,如郊区所示)。无论如何,一个类只是一个模板。当你真正制作类定义的东西时,可以用数据填充它。

问题第一部分

所以让我们看看你需要什么:

person 类必须具有属性(first_name、last_name、phone_number)。“朋友”类必须有出生日期和电子邮件。

所以让我们创建一个名为 person 的类:

class Person:

当我们创建类时,我们将它们“实例化”,并且我们经常需要一些指令,以便程序知道在创建/实例化这些“人”事物之一时要做什么。我们经常将这些指令放在一个名为“init”的部分中:

class Person:
    def __init__(self):

“self”部分令人困惑,但我们类中的每个方法都需要某种方式来知道它是特定类对象的一部分。这是一种非常模糊的方式来掩盖“自我”正在发生的事情。现在,这只是一个通用规则:我们放在类中的所有函数都将“self”作为它们的第一个参数。

接下来我们要添加您提到的属性。这通常看起来像这样:

class Person:

    def __init__(self, first_name, last_name, phone_number):
        self.first_name = first_name
        self.last_name = last_name
        self.phone_number = phone_number

我将这些属性放在__init__函数中,这意味着每当我第一次创建这些“人”事物之一时,我必须指定这些事物,否则我的创建将无法工作。当我创建一个时,我只需要调用我的类Person并给它期望的东西:

bob = Person('Bob', 'Something', '43819110')

现在我可以通过以下方式访问 bob 的属性:

>>> bob.phone_number
'43819110'

我们可以添加一个新人(可能input()像您上面那样使用......):

sinatra = Person('Frank', 'Sinatra', 217653918')

我们做得很好,用我们的Person蓝图创造了各种各样的人。我们需要一些容器来容纳所有这些人:

contacts = [sinatra, bob, etc.]

我们可以通过遍历该容器来获取某人的电话号码:

for contact in contacts:
    if contact.first_name == 'Bob':
      print(contact.phone_number)

这里有很多工作要做,但它可能会帮助您朝着正确的方向开始。关键是将任务分开并尝试让它们一起工作。快乐编码!


[删除其他所有内容,因为它太长,对其他人真正有用]

于 2013-08-18T05:29:43.630 回答
1

这可能不符合您的结构要求,但如果我要做您正在做的事情,我可能会尝试一些结构更像这样的东西:

class contacts:
    contacts = [{...}, {...}] # Contains all the contacts as dictionaries in a list

    def add_person(...):
        self.all_contacts += ...

    def add_friend(...):
        self.all_contacts += ...

    def get_contact(...):      # This is just potential code
        if ... in self.all_contacts:
            return ...

(如果我真的想要,也许让朋友分开:)

people = [{...}, {...}]            # all people contacts
friends = [{...}, {...}]           # all friend contacts
all_contacts = people + friends    # both

我更喜欢这种方法,因为(我认为)它的层次结构比为两个相似的事物设置单独的类更清晰。(即朋友

这种方式使得将不同的“通讯录”作为contacts类的多个实例变得更容易理解,每个实例中都有朋友的类别。

jims_contacts = contacts()
jims_contacts.add_friend("Megan", "Cook", 02754321, "email@something.com", 170398)

more_contacts = contacts()

PS 单个联系人看起来像一本字典:

{'first':"Zaphod", 'last':"Beeblebrox", 'number':2293107}

...并且每个联系人都存储在一个列表中。这样可以轻松提取属性并在以后查找内容。

祝你好运!

于 2013-08-18T05:52:07.357 回答
0

好吧,我不能给你所有的答案,因为这似乎是你的功课,但我会帮助你开始。这是您描述的 Person 类的最低要求(可能是您所需要的全部):

class Person(object):

    def __init__(self, first, last, phone):
        self.first_name = first
        self.last_name = last
        self.phone_number = phone

而且我猜您的课程讲师希望您使用继承。如果他这样做了……那么即使他没有这样做,对 Friend 使用继承也是一个好主意(即 Friend 类应该是 Person 的派生类)。

有关继承的更多信息,请查看此线程:

在 Python 中使用 super() 关键字的单继承的基本示例是什么?

如果您有任何问题,请随时发表评论。

于 2013-08-18T05:23:13.533 回答