面向对象的 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)