程序由多个类组成

时间:2013-08-18 04:32:24

标签: python python-3.x

我需要创建一个由两个类组成的程序; “person”班级和“朋友”班级。 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: ")

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

3 个答案:

答案 0 :(得分:4)

关于课程的说明

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

问题第一部分

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

  

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

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

class Person:

当我们创建类时,我们'实例化'它们并且我们经常需要一些指令,以便程序知道在创建/实例化这些“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'时,我必须指定这些东西或者我的创作将无法奏效。当我创建一个时,我只需要调用我的类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)

这里有很多可以使用的东西,但它可以帮助你开始朝着正确的方向前进。重点是分离任务并尝试让它们一起工作。快乐的编码!


[删除了所有其他内容,因为它太长而不能对其他任何人有用]

答案 1 :(得分: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()

P.S。单个联系人看起来像字典:

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

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

祝你好运!

答案 2 :(得分: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的派生类)。

有关继承的更多信息,请查看此主题:

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

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