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

时间:2018-12-20 20:28:26

标签: python class

我一直在尝试学习课程,但是我很难看清它们何时变得有用。在与员工的这个示例中,我发现使用组织良好的多维列表会更容易。 我提供了我的意思的示例,其中包含两组代码,这些代码使用列表和类进行完全相同的操作。

我尝试看过许多有关课程的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]())

5 个答案:

答案 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

在更一般的情况下,是否应该使用类(功能样式)是品味和哲学的问题。类的最大优势(保持状态)还可以带来最大的陷阱(如果不精心设计,则会产生副作用)。

相关问题