Python 在什么用例中,类比列表更有用?

Python 在什么用例中,类比列表更有用?,python,class,Python,Class,我一直在努力学习课程,我努力想知道它们什么时候能变得有用。在这个员工示例中,我发现使用组织良好的多维列表更容易。 我提供了两组代码的示例,它们使用列表和类完成完全相同的工作 我试着看了很多youtube课堂教程,但我似乎不明白为什么多维列表做不到更好 class Employees(): def __init__(self, First_Name, Last_Name, pay = "26000"): self.First_Name = First_Name

我一直在努力学习课程,我努力想知道它们什么时候能变得有用。在这个员工示例中,我发现使用组织良好的多维列表更容易。 我提供了两组代码的示例,它们使用列表和类完成完全相同的工作

我试着看了很多youtube课堂教程,但我似乎不明白为什么多维列表做不到更好

class Employees():
    def __init__(self, First_Name, Last_Name, pay = "26000"):
        self.First_Name = First_Name
        self.Last_Name = Last_Name
        self.pay = pay
    def greeting(self):
        return "Hi, my name is "+self.First_Name+" "+self.Last_Name+" and I earn: "+self.pay
employee_1 = Employees("First_Name_1", "Last_Name_1", "30000")
employee_2 = Employees("First_Name_2", "Last_Name_2")
print(employee_1.greeting())
print(employee_2.greeting())



employee_list = []
def employees(employee_list, First_Name, Last_Name, pay = "26000"):
    employee_list += [[First_Name, Last_Name, pay, lambda: greeting(First_Name, Last_Name, pay)]]
def greeting(a, b, c):
    return "Hi, my name is "+a+" "+b+" and I earn: "+c
employees(employee_list, "First_Name_1", "Last_Name_1", "30000")
employees(employee_list, "First_Name_2", "Last_Name_2")
print(employee_list[0][3]())
print(employee_list[1][3]())

类比列表更有组织性和实用性。例如,类具有构造函数、方法、属性、魔术方法、超类等。当您有许多相关函数以及想要创建多个对象时,类最有用。它们可以极大地帮助组织意大利面代码,尤其是与模块一起使用时。此外,许多库使用类而不是列表。

类提供了更好的可读性和更好的抽象,即您可以从类“pet”继承“dog”的属性(变量/函数)


通常,类的风格更好,因为它可以清理“意大利面”代码。

这是面向对象编程的原则;您正在将数据封装到类中,而不是以更为程序化和特别的方式声明它们


直接的优点是,第一个代码块的可读性更高,其意图也更清晰。你有员工,你知道你想打印他们的问候语。对于第二个代码块,您有一个列表,要求您跟踪每个值的位置,
employee\u list[0][3]
所代表的内容并不明显。如果列表的顺序因任何原因发生变化,则重构或修复也会变得很困难。

定义类为处理数据提供了方便的语法,但它并没有提供您无法模拟的内容。考虑一下列表示例的稍微不同的修改:

# Employees.__init__
# Instead of named attributes, there are implied positions in a list
# 0 - first name
# 1 - last name
# 2 - salary
def make_employee(first, last, pay="26000"):
    return [first, last, pay]

# Employees.greeting
def greeting(employee):
    first, last, pay = employee
    return "Hi, my name is {} {} and I earn {}".format(first, last, pay)

# Call make_employee instead of Employees
employee1 = make_employee("First_Name_1", "Last_Name_1", "30000")
employee1 = make_employee("First_Name_2", "Last_Name_2")

# Pass employee "objects" to greeting
print(greeting(employee1))
print(greeting(employee2))
撇开对继承的支持不谈,这里唯一真正的区别是您显式地将雇员“对象”传递给函数,而不是调用对象上的方法


继承和名称空间(多个类可以有一个名为
greeting
的方法,而不会相互干扰)是使用类的两大优势。

类是类型,列表已经是内置类型,具有构造函数和方法(例如,.sort)。因此,问题应该是一个类型(或类)是否足以满足您所做的事情,或者您是否希望有额外的(不同的)行为

您甚至可以将列表类型扩展到自己的版本,并更改行为和添加类似的方法,并维护所有已经存在的方法:

class MyList(list):

   def my_method(self):
       pass

在更一般的情况下,是否应该使用类(函数式风格)是一个品味和哲学的问题。类的最大优点(维护状态)也可能是最大的陷阱(如果不精心设计,会产生副作用)。

类定义对象的类型。列表是一个内置的容器类。在这种情况下,您可能只需要一个
员工
对象的
列表
==数据+操作-列表只是数据如果您只想存储员工的编号并对其进行一些计算,列表就可以了。但一旦你写了一个能做有意义的事情的应用程序,最好开始在课堂上思考,因为每个课堂都有特定的任务。我以前把所有的事情都写成一个过程。在这种情况下,类并不是真正必要的。但一旦你的应用程序变得复杂,你需要能够维护它,你就需要使用类了。@PatrickArtner不是真的。
列表
是类的对象。它有操作(列表方法…),您可以用类编写意大利面代码。课程不会改变这一点。