【问题标题】:Program consisting of multiple classes [closed]由多个类组成的程序[关闭]
【发布时间】:2013-08-18 04:32:23
【问题描述】:

我需要创建一个包含两个类的程序; "person" 类和 "friend" 类。 person 类必须具有 属性(first_name, last_name, phone_number)。 “朋友”类必须有出生日期和电子邮件。
应用程序将向用户显示一个主菜单,允许用户添加联系人、按姓名查找联系人或退出应用程序。
我找到了一个很棒的指南 here
我不知道如何通过多个类来实现这一点。我参加了为期 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: ")

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

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    课堂笔记

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

    问题第一部分

    那么让我们看看你需要什么:

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

    让我们创建一个名为 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)
    

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


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

    【讨论】:

    • +10 以获得比我更详细和友好的答案!
    • 好吧,谢谢,朋友。上课很有趣。
    • @erewok 你解释得很好,我已经更正了。我无法测试它,但你知道我为什么会出现语法错误吗?我需要做什么来修复它?
    • 不幸的是,我的帖子有点长,但我认为如果你的类构造正确,你的菜单应该真的可以工作。专注于正确设置类并专注于理解类是如何构建的,其余的应该很容易。最后,在这个时候,我强烈推荐not编码来应对错误。你的时间将更好地花在编写小而有效的东西上,并在这些东西的基础上进行构建。在您理解所写内容之前,不要简单地尝试修复出现的错误。
    • 我将添加一个get_info 方法并向您展示它的外观。
    【解决方案2】:

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

    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 类的多个实例变得更容易理解,每个实例中都有朋友和人类别。 p>

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

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

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

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

    祝你好运!

    【讨论】:

      【解决方案3】:

      好吧,我不能给你所有的答案,因为这似乎是你的作业,但我会帮助你开始。这是您描述的 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 的派生类)。

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

      What is a basic example of single inheritance using the super() keyword in Python?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 2021-04-02
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        相关资源
        最近更新 更多