面向对象Python - 入门
编程语言不断涌现,不同的编程方法也是如此。面向对象编程就是这样一种在过去几年中变得非常流行的编程方法。
本章讨论Python编程语言的特性,这些特性使其成为一种面向对象编程语言。
语言编程分类方案
Python可以归类为面向对象编程方法。下图显示了各种编程语言的特性。观察使Python面向对象的特性。
语言类别 | 类别 | 语言 |
---|---|---|
编程范式 | 过程式 | C, C++, C#, Objective-C, Java, Go |
脚本式 | CoffeeScript, JavaScript, Python, Perl, PHP, Ruby | |
函数式 | Clojure, Erlang, Haskell, Scala | |
编译类别 | 静态 | C, C++, C#, Objective-C, Java, Go, Haskell, Scala |
动态 | CoffeeScript, JavaScript, Python, Perl, PHP, Ruby, Clojure, Erlang | |
类型类别 | 强类型 | C#, Java, Go, Python, Ruby, Clojure, Erlang, Haskell, Scala |
弱类型 | C, C++, C#, Objective-C, CoffeeScript, JavaScript, Perl, PHP | |
内存类别 | 托管 | 其他 |
非托管 | C, C++, C#, Objective-C |
什么是面向对象编程?
面向对象意味着面向对象。换句话说,这意味着功能上倾向于对对象建模。这是通过描述通过其数据和行为进行交互的对象集合来对复杂系统建模的众多技术之一。
Python,一种面向对象编程 (OOP) 语言,是一种编程方式,它专注于使用对象和类来设计和构建应用程序。面向对象编程 (OOP) 的主要支柱是继承、多态、抽象和封装。
面向对象分析 (OOA) 是检查问题、系统或任务并识别对象及其之间交互的过程。
为什么要选择面向对象编程?
Python的设计采用了面向对象的方法。OOP 提供以下优势:
提供清晰的程序结构,使映射现实世界问题及其解决方案变得容易。
方便维护和修改现有代码。
增强程序模块化,因为每个对象独立存在,并且可以轻松添加新功能而不会影响现有功能。
为代码库提供良好的框架,程序员可以轻松地调整和修改提供的组件。
提高代码可重用性
过程式编程与面向对象编程
过程式编程源于结构化编程,基于函数/过程/例程的概念。在过程式编程中,很容易访问和更改数据。另一方面,面向对象编程 (OOP) 允许将问题分解成称为对象的多个单元,然后围绕这些对象构建数据和函数。它比过程或函数更强调数据。此外,在 OOP 中,数据是隐藏的,外部过程无法访问。
下图中的表格显示了 POP 和 OOP 方法的主要区别。
过程式编程 (POP) 与面向对象编程 (OOP) 的区别。
过程式编程 | 面向对象编程 | |
---|---|---|
基于 | 在 POP 中,整个重点都在数据和函数上 | OOP 基于现实世界场景。整个程序被分成称为对象的小部分 |
可重用性 | 代码重用有限 | 代码重用 |
方法 | 自顶向下方法 | 面向对象设计 |
访问说明符 | 无 | 公有、私有和保护 |
数据移动 | 数据可以在系统中的函数之间自由移动 | 在 OOP 中,数据可以通过成员函数相互移动和通信 |
数据访问 | 在 POP 中,大多数函数使用全局数据共享,可以在系统中的函数之间自由访问 | 在 OOP 中,数据不能在方法之间自由移动,它可以保存在公有或私有中,因此我们可以控制数据的访问 |
数据隐藏 | 在 POP 中,没有特定的隐藏数据的方法,因此安全性较低 | 它提供数据隐藏,因此更安全 |
重载 | 不可能 | 函数和运算符重载 |
示例语言 | C, VB, Fortran, Pascal | C++, Python, Java, C# |
抽象 | 在过程级别使用抽象 | 在类和对象级别使用抽象 |
面向对象编程的原则
面向对象编程 (OOP) 基于对象而不是动作,以及数据而不是逻辑的概念。为了使编程语言面向对象,它应该具有启用使用类和对象以及实现和使用基本面向对象原则和概念(即继承、抽象、封装和多态)的机制。
让我们简要了解面向对象编程的每个支柱:
封装
此属性隐藏不必要的细节,并使管理程序结构更容易。每个对象的实现和状态都隐藏在定义明确的边界之后,这为使用它们提供了简洁明了的接口。实现此目的的一种方法是将数据设为私有。
继承
继承,也称为泛化,允许我们捕获类和对象之间的层次关系。例如,“水果”是“橙子”的泛化。从代码重用的角度来看,继承非常有用。
抽象
此属性允许我们隐藏细节并仅公开概念或对象的必要特征。例如,驾驶踏板车的人知道按下喇叭会发出声音,但他不知道按下喇叭时声音是如何产生的。
多态
多态意味着多种形式。也就是说,事物或动作以不同的形式或方式存在。多态的一个很好的例子是类中的构造函数重载。
面向对象的Python
Python编程的核心是对象和OOP,但是您不必将自己限制在通过将代码组织成类来使用OOP。OOP 补充了 Python 的整体设计理念,并鼓励一种简洁实用的编程方式。OOP 还能够编写更大更复杂的程序。
模块与类和对象
模块就像“字典”
在使用模块时,请注意以下几点:
Python 模块是封装可重用代码的包。
模块驻留在包含__init__.py文件的文件夹中。
模块包含函数和类。
使用import关键字导入模块。
回想一下,字典是键值对。这意味着如果您有一个键为EmployeID的字典,并且您想检索它,那么您必须使用以下代码行:
employee = {“EmployeID”: “Employee Unique Identity!”} print (employee [‘EmployeID])
您必须按照以下流程处理模块:
模块是一个包含一些函数或变量的 Python 文件。
导入您需要的文件。
现在,您可以使用“.”(点)运算符访问该模块中的函数或变量。
考虑一个名为employee.py的模块,其中包含一个名为employee的函数。该函数的代码如下:
# this goes in employee.py def EmployeID(): print (“Employee Unique Identity!”)
现在导入模块,然后访问函数EmployeID:
import employee employee. EmployeID()
您可以在其中插入一个名为Age的变量,如下所示:
def EmployeID(): print (“Employee Unique Identity!”) # just a variable Age = “Employee age is **”
现在,以以下方式访问该变量:
import employee employee.EmployeID() print(employee.Age)
现在,让我们将其与字典进行比较:
Employee[‘EmployeID’] # get EmployeID from employee Employee.employeID() # get employeID from the module Employee.Age # get access to variable
请注意,Python 中存在一种常见模式:
获取一个key = value样式的容器
通过键的名称从中获取某些内容
将模块与字典进行比较时,两者相似,但以下几点除外:
在字典的情况下,键是一个字符串,语法为[key]。
在模块的情况下,键是一个标识符,语法为.key。
类就像模块
模块是一个专门的字典,可以存储 Python 代码,以便您可以使用“.”运算符访问它。类是一种将函数和数据的组合放入容器中以便您可以使用“.”运算符访问它们的方法。
如果您必须创建一个类似于 employee 模块的类,您可以使用以下代码:
class employee(object): def __init__(self): self. Age = “Employee Age is ##” def EmployeID(self): print (“This is just employee unique identity”)
注意- 类优于模块,因为您可以按原样重用它们,而且不会产生太多干扰。而对于模块,您只有一个模块与整个程序一起使用。
对象就像迷你导入
类就像一个迷你模块,您可以使用称为实例化的概念,以类似于类的方式导入它。请注意,当您实例化一个类时,您会得到一个对象。
您可以实例化一个对象,类似于将类像函数一样调用,如下所示:
this_obj = employee() # Instantiatethis_obj.EmployeID() # get EmployeId from the class print(this_obj.Age) # get variable Age
您可以通过以下三种方式中的任何一种执行此操作:
# dictionary style Employee[‘EmployeID’] # module style Employee.EmployeID() Print(employee.Age) # Class style this_obj = employee() this_obj.employeID() Print(this_obj.Age)