在Python中调用类的实例

时间:2014-06-17 19:13:59

标签: python class oop

您好我正在尝试调用我的类的实例,但不知道该怎么做,在这个阶段它只有在我预先指定newContact中的所有内容并忽略类AddContact时才有效。我想能够将新的联系人列入名单吗?请帮忙。

我的代码:

 class People():
    def __init__(self, name, surname, age, mobile_no, home_no):
        self.name = name
        self.surname = surname
        self.age = age
        self.mobile_no = mobile_no
        self.home_no = home_no

    def DisplayContacts(self):
        print("First Name: \t", self.name)
        print("Surname: \t", self.surname)
        print("Age: \t", self.age)
        print("Mobile Number: \t", self.mobile_no)
        print("Home Number: \t", self.home_no)

class AddContact():

        newname = str(input("First name: \t"))
        newsurname = str(input("Surname: \t"))
        newage = int(input("Age: \t"))
        newmobile_no = int(input("Mobile Number: \t"))
        newhome_no = int(input("Home Number: \t"))
        newContact = People(newname, newsurname, newage, newmobile_no, newhome_no) 


newContact = People()  

for p in newContact():
    p.DisplayContacts()

3 个答案:

答案 0 :(得分:1)

如果你想建立一个联系人列表,而不是AddContact作为一个类,那就把它变成一个函数:

def add_contact():
    newname = str(input("First name: \t"))
    newsurname = str(input("Surname: \t"))
    newage = int(input("Age: \t"))
    newmobile_no = int(input("Mobile Number: \t"))
    newhome_no = int(input("Home Number: \t"))
    newContact = People(newname, newsurname, newage, newmobile_no, newhome_no)
    return newContact

然后,您可以创建list个联系人:

contacts = []
contacts.append(add_contact())
contacts.append(add_contact())

最后,通过迭代显示list中的联系人:

for p in contacts:
    p.DisplayContacts()

答案 1 :(得分:1)

这里的基本问题是你假设People类将作为一个容器类型来容纳多个联系人,而你已经写成了一个只保留属性的类。 联系。

您的代码的实际目标尚不清楚。您可以在将People类视为单个联系人及其集合之间来回切换:

__init__功能中,您准备对象以存储单个联系人(一个人有一个姓名,年龄等)

class People():
    def __init__(self, name, surname, age, mobile_no, home_no):
        self.name = name
        self.surname = surname
        self.age = age
        self.mobile_no = mobile_no
        self.home_no = home_no

此函数虽然名为DisplayContacts(复数),但也将对象视为存储单个联系人:

  def DisplayContacts(self):
      print("First Name: \t", self.name)
      print("Surname: \t", self.surname)
      print("Age: \t", self.age)
      print("Mobile Number: \t", self.mobile_no)
      print("Home Number: \t", self.home_no)

我不太清楚这是什么。我认为你的意思是在这里创建一个函数而不是一个类,所以我要改变它。现在,您已阅读新联系人的信息并将其存储在People类的新实例中:

# was class AddContact(), which makes no sense:
def AddContact():

        newname = str(input("First name: \t"))
        newsurname = str(input("Surname: \t"))
        newage = int(input("Age: \t"))
        newmobile_no = int(input("Mobile Number: \t"))
        newhome_no = int(input("Home Number: \t"))
        newContact = People(newname, newsurname, newage, newmobile_no, newhome_no) 

现在对于主程序:通过实例化奇怪命名的People类来创建单个联系人。然后尝试将此对象称为函数(???)。这会导致错误,因为您尚未定义__call__方法,但它可能不是您首先想要做的事情。最后,您尝试将该结果用作迭代器。我不知道目的是什么:

newContact = People()  

# will cause an error: no People.__call__ method
result_of_calling_object_like_a_function = newContact()

# would cause another error, unless the object in question has an
# __iter__ method:
for p in result_of_calling_object_like_a_function:
    p.DisplayContacts()

答案 2 :(得分:0)

我想你想创建一个类实例列表。

您可以了解如何在Python here中创建列表。

你可以找出哪个班级是here

Here概述了Python中的类。