栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

什么时候应该在Python中使用类?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么时候应该在Python中使用类?

类是面向对象程序设计的支柱。OOP高度关注代码的组织,可重用性和封装。

首先,免责声明:OOP与函数编程在某种程度上相反,后者是Python中经常使用的一种不同范例。并非每个使用Python(或肯定是大多数语言)编程的人都使用OOP。在Java
8中,您可以做很多事情,而这些都不是面向对象的。如果您不想使用OOP,请不要使用。如果您只是编写一次性脚本来处理将不再使用的数据,那么请按原样编写。

但是,使用OOP的原因很多。

原因如下:

  • 组织:OOP定义了在代码中描述和定义数据与过程的众所周知的标准方法。数据和过程都可以存储在不同的定义级别(在不同的类中),并且有谈论这些定义的标准方法。也就是说,如果您以标准方式使用OOP,它将帮助您以后的自己和其他人理解,编辑和使用您的代码。同样,您可以使用数据结构的名称并方便地引用它们,而不是使用复杂的任意数据存储机制(命令或列表的命令,集合的命令或列表的命令或其他命令)。

  • 状态:OOP可帮助您定义和跟踪状态。例如,在一个经典的例子中,如果您要创建一个处理学生的程序(例如,年级程序),则可以将您需要的所有有关他们的信息都保留在一个位置(姓名,年龄,性别,年级,课程,年级,教师,同龄人,饮食,特殊需求等),并且只要该对象还活着并且易于访问,该数据就会保留下来。

  • 封装:通过封装,过程和数据一起存储。方法(功能的OOP术语)与操作和产生的数据一起定义。在像Java这样的允许访问控制的语言中,或者在Python中,取决于您描述公共API的方式,这意味着可以向用户隐藏方法和数据。这意味着,如果您需要或想要更改代码,则可以对代码的实现做任何想做的事,但要使公共API保持不变。

  • 继承:继承使您可以在一处(在一类中)定义数据和过程,然后在以后重写或扩展该功能。例如,在Python中,我经常看到人们创建

    dict
    该类的子类以添加其他功能。常见的更改是覆盖从不存在的字典中请求键以基于未知键提供默认值时引发异常的方法。这允许您现在或以后扩展自己的代码,允许其他人扩展您的代码,并允许您扩展其他人的代码。

  • 可重用性:所有这些原因以及其他原因都可以提高代码的可重用性。面向对象的代码使您可以编写可靠的(经过测试的)代码一次,然后反复使用。如果需要针对特定​​用例进行调整,则可以从现有的类继承并覆盖现有的行为。如果您需要更改某些内容,则可以在保留现有公共方法签名的同时进行全部更改,并且没有一个人是明智的(希望如此)。

同样,有几个原因不使用OOP,而您则不需要。但是幸运的是,使用Python之类的语言,您可以使用一点或很多,这取决于您。

学生用例的一个示例(不能保证代码质量,仅是一个示例):

面向对象

class Student(object):    def __init__(self, name, age, gender, level, grades=None):        self.name = name        self.age = age        self.gender = gender        self.level = level        self.grades = grades or {}    def setGrade(self, course, grade):        self.grades[course] = grade    def getGrade(self, course):        return self.grades[course]    def getGPA(self):        return sum(self.grades.values())/len(self.grades)# Define some studentsjohn = Student("John", 12, "male", 6, {"math":3.3})jane = Student("Jane", 12, "female", 6, {"math":3.5})# Now we can get to the grades easilyprint(john.getGPA())print(jane.getGPA())

标准区

def calculateGPA(gradeDict):    return sum(gradeDict.values())/len(gradeDict)students = {}# We can set the keys to variables so we might minimize typosname, age, gender, level, grades = "name", "age", "gender", "level", "grades"john, jane = "john", "jane"math = "math"students[john] = {}students[john][age] = 12students[john][gender] = "male"students[john][level] = 6students[john][grades] = {math:3.3}students[jane] = {}students[jane][age] = 12students[jane][gender] = "female"students[jane][level] = 6students[jane][grades] = {math:3.5}# At this point, we need to remember who the students are and where the grades are stored. Not a huge deal, but avoided by OOP.print(calculateGPA(students[john][grades]))print(calculateGPA(students[jane][grades]))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号