Python - 何时创建类以及何时创建函数

Roy*_*ish 4 python oop class function

是的,所以我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

现在,如果我想通过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"))
Run Code Online (Sandbox Code Playgroud)

请帮帮我,因为我将把它变成一个GUI应用程序(单一分配).

jon*_*rpe 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)
Run Code Online (Sandbox Code Playgroud)

将新联系人添加到联系人列表应该是:

  1. 例如,类的实例方法(或者你持有联系人列表的任何东西); 要么AddressBookContactList
  2. 如果您没有用于保存实例的类,则需要单独的函数Contact.

例如:

class AddressBook(object):

    ...

    def add_contact(self, contact=None):
        if contact is None:
            contact = Contact.from_input()
        self.contacts.append(contact)
Run Code Online (Sandbox Code Playgroud)

现在您的UI可以创建Contact并直接传递给它address_book.add_contact().