面向对象的 Python - 简介
编程语言不断涌现,不同的方法论也在不断涌现。面向对象编程就是这样一种方法论,在过去几年中变得非常流行。
本章讨论 Python 编程语言的特性,使其成为一种面向对象的编程语言。
语言编程分类方案
Python 的特点是面向对象的编程方法。下图展示了各种编程语言的特点。观察 Python 的面向对象特性。
语言班 | 类别 | 语言 |
---|---|---|
编程范式 | 程序 | C、C++、C#、Objective-C、java、Go |
脚本编写 | CoffeeScript、JavaScript、Python、Perl、Php、Ruby | |
功能性 | Clojure、Eralang、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 |
什么是面向对象编程?
面向对象意味着针对对象。换句话说,它意味着在功能上针对对象建模。这是通过数据和Behave描述交互对象的集合来对复杂系统进行建模的众多技术之一。
Python 是一种面向对象编程 (OOP),是一种专注于使用对象和类来设计和构建应用程序的编程方式。面向对象编程 (OOP) 的主要支柱是继承、多态性、抽象和封装。
面向对象分析(OOA)是检查问题、系统或任务并识别对象以及它们之间的交互的过程。
为什么选择面向对象编程?
Python 是采用面向对象的方法设计的。OOP 具有以下优点 -
提供清晰的程序结构,可以轻松映射现实世界的问题及其解决方案。
便于轻松维护和修改现有代码。
增强程序模块化,因为每个对象独立存在,并且可以轻松添加新功能而不会干扰现有功能。
为代码库提供了一个良好的框架,其中提供的组件可以由程序员轻松调整和修改。
赋予代码可重用性
过程编程与面向对象编程
基于过程的编程源自基于函数/过程/例程概念的结构编程。在面向过程的编程中,访问和更改数据很容易。另一方面,面向对象编程(OOP)允许将问题分解为许多称为对象的单元,然后围绕这些对象构建数据和函数。它更强调数据而不是过程或函数。同样在 OOP 中,数据是隐藏的,外部过程无法访问。
下图中的表格显示了 POP 和 OOP 方法之间的主要区别。
面向过程编程(POP)与面向过程编程的区别 面向对象编程(OOP)。
面向过程的编程 | 面向对象编程 | |
---|---|---|
基于 | 在 Pop 中,全部焦点都在数据和函数上 | Oops 基于现实世界的场景。整个程序被分为称为对象的小部分 |
可重复使用性 | 有限的代码重用 | 代码复用 |
方法 | 自上而下的方法 | 以对象为中心的设计 |
访问说明符 | 没有 | 公共、私人和受保护的 |
数据移动 | 数据可以在系统中的功能之间自由移动 | 在Oops中,数据可以通过成员函数相互移动和通信 |
数据存取 | 在pop中,大多数函数都使用全局数据进行共享,系统中函数与函数之间可以自由访问这些数据 | 在 Oops 中,数据不能在方法之间自由移动,它可以保存在公共或私有中,这样我们就可以控制数据的访问 |
数据隐藏 | 在流行音乐中,隐藏数据的特定方式,因此安全性稍差 | 它提供数据隐藏,因此更加安全 |
超载 | 不可能 | 函数和运算符重载 |
示例语言 | C、VB、Fortran、帕斯卡 | 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]。
对于module来说,键是一个标识符,语法是 .key。
类就像模块
Module 是一个专门的字典,可以存储 Python 代码,因此您可以使用“.”来访问它。操作员。类是一种将一组函数和数据放入容器中的方法,以便您可以使用“.”运算符访问它们。
如果您必须创建一个类似于员工模块的类,您可以使用以下代码来完成:
class employee(object): def __init__(self): self. Age = “Employee Age is ##” def EmployeID(self): print (“This is just employee unique identity”)
注意- 类优于模块,因为您可以按原样重用它们,而不会产生太多干扰。而使用模块时,整个程序只有一个。
对象就像迷你导入
类就像一个迷你模块,您可以使用名为instantiate的概念以与类类似的方式导入。请注意,当您实例化一个类时,您会得到一个对象。
您可以实例化一个对象,类似于像函数一样调用类,如下所示 -
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)