我一直在尝试学习课程,但是我很难看清它们何时变得有用。在与员工的这个示例中,我发现使用组织良好的多维列表会更容易。 我提供了我的意思的示例,其中包含两组代码,这些代码使用列表和类进行完全相同的操作。
我尝试看过许多有关课程的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]())
答案 0 :(得分:2)
与列表相比,类更井井有条,更有用。例如,类具有构造函数,方法,属性,魔术方法,超类等。当您具有许多相关功能且要创建多个对象时,类最有用。他们可以极大地帮助组织意大利面条代码,尤其是与模块一起使用时。此外,许多库使用类而不是列表。
答案 1 :(得分:2)
这是面向对象编程的宗旨;您正在将数据封装到类中,而不是以更具过程性和即席方式声明它们。
立即的优势在于,第一个代码块更具可读性,并且其意图更加清晰。您有员工,并且知道要打印他们的问候。在第二个代码块中,您具有一个列表,该列表要求您跟踪每个值的位置,并且employee_list[0][3]
所代表的含义尚不明显。如果您的列表顺序由于任何原因发生变化,也很难重构或修复。
答案 2 :(得分:1)
定义类为使用数据提供了一种方便的语法,但是它并没有提供您无法模拟的内容。考虑一下清单示例的稍有不同:
# 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
的方法,而它们不会互相干扰)是使用类的两个主要优点。
答案 3 :(得分:0)
一个类可提供更好的可读性和更好的抽象性,即,您可以从“宠物”类继承“狗”的属性(变量/函数)。
通常,类是一种更好的样式,因为它可以清除“意大利面条”代码。
答案 4 :(得分:0)
类是类型,列表已经是带有构造函数和方法(例如.sort)的内置类型。因此,问题应该是类型(或类)是否足以满足您的工作需求,或者您是否想要具有额外的(不同的)行为。
您甚至可以将列表类型扩展到自己的版本,并更改行为并像这样添加方法并维护所有已经存在的方法:
class MyList(list):
def my_method(self):
pass
在更一般的情况下,是否应该使用类(功能样式)是品味和哲学的问题。类的最大优势(保持状态)还可以带来最大的陷阱(如果不精心设计,则会产生副作用)。