面向对象的 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 |
什么是面向对象编程?
面向对象是指面向对象。 换句话说,它意味着功能上针对建模对象。 这是用于通过数据和行为描述交互对象集合来对复杂系统进行建模的众多技术之一。
Python 是一种面向对象编程(OOP),是一种专注于使用对象和类来设计和构建应用程序的编程方式。面向对象编程(OOP)的主要支柱是继承、多态性、抽象 , 广告 封装。
面向对象分析 (OOA) 是检查问题、系统或任务并识别对象以及它们之间的交互的过程。
为何选择面向对象编程?
Python 采用面向对象的方法进行设计。 OOP 具有以下优点 −
提供清晰的程序结构,便于映射现实世界的问题及其解决方案。
便于维护和修改现有代码。
增强程序模块化,因为每个对象都独立存在,可以轻松添加新功能而不会干扰现有功能。
为代码库提供良好的框架,程序员可以轻松地调整和修改所提供的组件。
赋予代码可重用性
过程式编程与面向对象编程
基于过程的编程源自基于函数/过程/例程概念的结构化编程。在面向过程的编程中,访问和更改数据很容易。另一方面,面向对象编程 (OOP) 允许将问题分解为多个称为对象的单元,然后围绕这些对象构建数据和函数。它更强调数据而不是过程或函数。此外,在 OOP 中,数据是隐藏的,无法通过外部过程访问。
下图中的表格显示了 POP 和 OOP 方法之间的主要区别。
面向过程编程 (POP) 与面向对象编程 (OOP) 之间的区别。
面向过程编程 | 面向对象编程 | |
---|---|---|
基于 | 在 Pop 中,整个焦点都集中在数据和函数上 | Oops 基于现实世界场景。整个程序被分成称为对象的小部分 |
可重用性 | 有限的代码重用 | 代码重用 |
方法 | 自上而下的方法 | 以对象为中心的设计 |
访问说明符 | 没有 | 公共、私有和受保护 |
数据移动 | 数据可以在系统中的函数之间自由移动 | 在 Oops 中,数据可以通过成员函数移动和相互通信 |
数据访问 | 在 pop 中,大多数函数使用全局数据进行共享,可以在系统中的函数之间自由访问 | 在 Oops 中,数据不能在方法之间自由移动,它可以保持在公共或私有中,因此我们可以控制数据的访问 |
数据隐藏 | 在 pop 中,隐藏数据的方式非常具体,因此安全性稍差 | 它提供数据隐藏功能,因此安全性更高 |
重载 | 不可能 | 函数和运算符重载 |
示例语言 | C、VB、Fortran、Pascal | C++、Python、Java、C# |
抽象 | 在过程级别使用抽象 | 在类和对象级别使用抽象 |
面向对象编程原理
面向对象编程 (OOP) 基于以下概念面向对象编程的核心是对象而不是动作,数据而不是逻辑。为了使编程语言面向对象,它应该具有一种机制,以便能够使用类和对象,以及实现和使用基本的面向对象原则和概念,即继承、抽象、封装和多态性。
![Oops](/object_oriented_python/images/oops.jpg)
让我们简要了解面向对象编程的每个要点 −
封装
此属性隐藏了不必要的细节,使程序结构管理更加容易。每个对象的实现和状态都隐藏在明确定义的边界后面,并提供了一个干净、简单的界面来处理它们。实现这一点的一种方法是将数据设为私有。
继承
继承,也称为泛化,允许我们捕获类和对象之间的层次关系。例如,"水果"是"橙子"的泛化。从代码重用的角度来看,继承非常有用。
抽象
此属性允许我们隐藏细节并仅公开概念或对象的基本特征。例如,驾驶摩托车的人知道按喇叭时会发出声音,但他不知道按喇叭时声音实际上是如何产生的。
多态性
多态性意味着多种形式。也就是说,一个事物或动作以不同的形式或方式出现。多态性的一个很好的例子是类中的构造函数重载。
面向对象的 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 代码,因此您可以使用"。"运算符访问它。类是一种将函数和数据分组并将它们放在容器中的方法,以便您可以使用"。"运算符访问它们。
如果您必须创建一个类似于员工模块的类,则可以使用以下代码来完成 −
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() # 从类中获取 EmployeId print(this_obj.Age) # 获取变量 Age
您可以通过以下三种方式之一执行此操作 −
# 字典样式 Employee['EmployeID'] # 模块样式 Employee.EmployeID() Print(employee.Age) # 类样式 this_obj = employee() this_obj.employeID() Print(this_obj.Age)