2014-06-17 9 views
0

嗨我想調用我的類的實例,但不知道如何做到這一點,在這個階段,它只有在我預先指定了newContact中的所有內容並忽略類AddContact時才起作用。我希望能夠將新的聯繫人添加到列表中?請幫忙。在Python中調用一個類的實例

我的代碼:

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() 
+2

'newContact'是* a *「Person」,名稱「People」令人困惑,因爲它是* not *集合。 – user2864740

+1

其他問題包括您的術語:「**呼叫** [我的類的實例。」調用一個類的實例將意味着像使用函數一樣使用實例,這可以通過實現'__call__'方法在Python中完成,但並不是您在此嘗試執行的操作。 –

回答

0

我想你想創建一個類實例的列表。

您可以瞭解如何使用Python here創建列表。

你可以找出什麼類是here

Here是Python中類的概述。

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()) 

最後,顯示在聯繫人迭代它:

for p in contacts: 
    p.DisplayContacts() 
+0

我已經這樣做了,但由於某種原因沒有幫助 –

+0

你能解釋一下「某些原因」的含義嗎?除非您向我們提供有關您的問題的詳細信息,否則我們無法幫助您。 – huu

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() 
+0

是的,人們應該是許多聯繫人的容器,但我怎樣才能讓它存儲多個聯繫人? –

+0

@丹,upvoted相關爲什麼作者的設計很差,以及如何可以改善。 – huu

+1

@JoeDoe,Python已經對容器類型有了很好的內置支持。在你的案例中,最好的對象設計是有一個Person類,並使用類似'list'的方式來包含多個'Person'實例。 – huu

相關問題