是的,所以我正在尝试使用Python OOP创建一个Contacts应用程序。我是OOP的新手,仍然试图理解这些概念。
我知道Class是所有对象的蓝图。我喜欢将Class视为一个实体,每个Object都是该实体的记录。我来自数据库背景,这就是为什么我这样解释它,随时纠正我。
无论如何,在我正在制作的联系人应用中,我创建了类Contacts
,如下所述:
class Contacts():
def __init__(self, firstName, lastName, address, groupType,
telephone, mobile, email, photoField):
self.firstName = firstName
self.lastName = lastName
self.address = address
self.groupType = groupType
self.telephone = telephone
self.mobile = mobile
self.email = email
self.photoField = photoField
def showDetails(self):
print("First Name:\t", self.firstName)
print("Last Name:\t", self.lastName)
print("Address:\t", self.address)
print("Telephone:\t", self.telephone)
print("Mobile:\t", self.mobile)
print("Email:\t", self.email)
现在,如果我想通过Contacts类将添加联系人添加到我用来存储每个联系人对象的列表中,我是否必须创建AddContacts
类,或者我创建一个函数而不是?我不知道我是否正确地提出了我的问题,以便你理解我的意思?
我想我想说的是添加联系人是一个过程,如果从数据库的角度来看,你不会创建一个名为“tbl_AddContacts”的表,因为你会通过查询来实现或者存储过程,所以在我看来我会定义添加联系人是一个功能。但是问我做C#编程的同事他说添加联系人应该由一个类来定义。
对我来说这是一个令人困惑的概念,特别是因为我不明白如何将AddContacts
类与Contacts
类相关联,甚至不知道如何定义AddContacts
类首先!。
以下是我为添加联系人定义的功能:
def addContacts():
firstName = input("First Name: ")
lastName = input("Last Name: ")
address = input("Address: ")
telephone = input("Telephone: ")
mobile = input("Mobile: ")
email = input("Email: ")
print("\n")
contact = Contacts(firstName, lastName, address, None, telephone, mobile, email, None)
contactsList.append(contact)
pickle.dump(contactsList, open("save.p", "wb"))
请帮帮我,因为我将把它变成一个GUI应用程序(单一分配)。
答案 0 :(得分:6)
添加联系人正在做某事,而不是做某事,所以它作为方法/功能而不是类是有意义的。我建议你的功能实际上应该放在两个不同的地方。
从用户输入创建新联系人应该是Contact
的类方法:
class Contact(object):
...
@classmethod
def from_input(cls):
firstName = input("First Name: ")
lastName = input("Last Name: ")
address = input("Address: ")
telephone = input("Telephone: ")
mobile = input("Mobile: ")
email = input("Email: ")
return cls(firstName, lastName, address, None,
telephone, mobile, email, None)
将新联系人添加到联系人列表中应该是:
AddressBook
或ContactList
课程(或您持有联系人列表的任何内容);或Contact
个实例。例如:
class AddressBook(object):
...
def add_contact(self, contact=None):
if contact is None:
contact = Contact.from_input()
self.contacts.append(contact)
现在,您的用户界面可以创建Contact
并将其直接传递给address_book.add_contact()
。
答案 1 :(得分:2)
首先,您的Contacts
类更适合称为Contact
,因为它只代表一个联系人。您的addContacts
选项可以是独立函数,也可以将其作为ContactList
类的一部分,该类管理您的Contact
对象列表。
class ContactList():
def __int__(self):
self.contact_list = []
def addContact(firstName, lastName, address, telephone, mobile, email):
contact = Contact(firstName, lastName, address, None, telephone, mobile, email, None)
self.contact_list.append(contact)
pickle.dump(contact_list, open("save.p", "wb"))
我建议将UI交互片段(所有input()
调用)与您的函数/方法分开,因为正如您所说,最终这将成为一个GUI应用程序。您应该保持实际从用户输入的代码分开,以便您以后可以更改它,而无需更改Contact
或ContactList
的任何部分。