Object Oriented Python 简明教程

Object Oriented Python - Introduction

编程语言不断涌现,不同的方法学也是如此。面向对象编程就是这样一种方法,在过去几年中变得非常流行。

本节讲述 Python 编程语言作为面向对象编程语言的特性。

Language Programming Classification Scheme

Python 可归类为面向对象编程方法。下图说明了各种编程语言的特性。观察 Python 中使其成为面向对象的特性。

Langauage Classes

Categories

Langauages

Programming Paradigm

Procedural

C、C ++、C#、Objective-C、Java、Go

Scripting

CoffeeScript、JavaScript、Python、Perl、Php、Ruby

Functional

Clojure, Eralang, Haskell, Scala

Compilation Class

Static

C、C++、C#、Objective-C、Java、Go、Haskell、Scala

Dynamic

CoffeeScript、JavaScript、Python、Perl、Php、Ruby、Clojure、Erlang

Type Class

Strong

C#、Java、Go、Python、Ruby、Clojure、Erlang、Haskell、Scala

Weak

C、C ++、C#、Objective-C、CoffeeScript、JavaScript、Perl、Php

Memory Class

Managed

Others

Unmanaged

What is Object Oriented Programming?

Object Oriented 意味着面向对象。换句话说,这就是对于对对象建模来说在功能上的方向。这是通过描述一组交互对象及其数据和行为对复杂系统建模时所用的众多技术之一。

Python,一种面向对象编程(OOP),是专注于使用对象和类来进行设计和构建应用程序的编程方法。面向对象编程(OOP)的主要支柱是 Inheritance, Polymorphism, Abstraction,Encapsulation

面向对象分析(OOA)是对问题、系统或任务进行检验并识别其对象和交互的过程。

Why to Choose Object Oriented Programming?

Python是在面向对象方法的基础上设计的。OOP具有以下优势-

  1. 提供清晰的程序结构,便于映射现实世界问题及其解决方案。

  2. 方便维护和修改现有代码。

  3. 增强程序模块化,因为每个对象独立存在,并且可以轻松添加新特性,而不会干扰现有特性。

  4. 为代码库提供了良好的框架,程序员可以轻松地对提供的组件进行改编和修改。

  5. Imparts code reusability

Procedural vs. Object Oriented Programming

基于过程的编程源于结构化编程,基于 functions/procedure/routines 的概念。在面向过程的编程中,访问和更改数据非常容易。另一方面,面向对象编程(OOP)允许将问题分解为若干称为 objects 的单元,然后围绕这些对象构建数据和函数。它更强调数据而不是过程或函数。同样,在 OOP 中,数据是隐藏的,外部过程无法访问。

下图中的表格显示了 POP 和 OOP 方法之间的主要区别。

面向过程编程(POP)和面向对象编程(OOP)之间的差异。

Procedural Oriented Programming

ObjectOriented Programming

Based On

在 Pop 中,整个焦点都集中在数据和函数上

Oops 基于一个现实世界的场景。整个程序被划分为称为对象的较小部分

Reusability

Limited Code reuse

Code reuse

Approach

Top down Approach

Object focused Design

Access specifiers

Not any

Public, private and Protected

Data movement

数据可以自由地在系统中的函数与函数之间移动

在 Oops 中,数据可相互移动并通过成员函数进行通信

Data Access

在 pop 中,大多数函数使用全局数据进行共享,这些数据可以从系统中的函数到函数自由访问

在 Oops 中,数据不能在方法与方法之间自由移动,可以将其保存在公共或私有部分,因此我们可以控制对数据的访问

Data Hiding

在 pop 中,有特定的方式来隐藏数据,因此安全性较低

提供数据隐藏,因此安全性更高

Overloading

Not possible

Functions and Operator Overloading

Example-Languages

C, VB, Fortran, Pascal

C++, Python, Java, C#

Abstraction

在过程级别使用抽象

在类和对象级别使用抽象

Principles of Object Oriented Programming

面向对象编程 (OOP) 基于 objects 而不是操作以及 data 而不是逻辑的概念。为了让编程语言面向对象,它应当具备一种机制来实现使用类和对象以及实现和使用基本面向对象原则和概念(即继承、抽象、封装和多态性)。

oops

让我们简要了解面向对象编程的各个支柱 -

Encapsulation

此属性隐藏了不必要详细信息,并让对程序结构的管理变得更轻松。每个对象实现和状态都隐藏在定义明确的界限之后,并提供了一个用于使用它们的清晰而简单的接口。实现此操作的一种方式是使数据私有。

Inheritance

继承也称为泛化,它允许我们捕获类和对象之间的层级关系。例如,“水果”就是“橙子”的一项概括。继承从代码重用角度来看非常有用。

Abstraction

此属性允许我们隐藏详细信息并仅公开某个概念或对象的关键特征。例如,驾驶滑板车的人知道按喇叭会发出声音,但他不知道按喇叭实际上如何产生声音。

Polymorphism

多态性指多种形式。也就是说,一项事物或操作会以不同的形式或方式存在。构造函数类重载就是一个很好的多态性例子。

Object-Oriented Python

Python 编程的核心是 objectOOP ,但您不必将自己限制在通过将代码整理成类来使用 OOP。OOP 增强了 Python 的整体设计理念,并支持以整洁有效的方式编程。OOP 还支持编写更大型且更复杂的程序。

Modules vs. Classes and Objects

Modules are like “Dictionaries”

在使用模块时,注意以下要点 -

  1. Python 模块是一个用于封装可重用代码的程序包。

  2. Modules 驻留在带有 init.py 文件的文件夹中。

  3. Modules 包含函数和类。

  4. 使用 import 关键字导入 modules。

回想一下,字典是一个 key-value 对。这意味着,如果您有一个键为 EmployeID 的字典,并且您想要检索它,那么您将必须使用下列代码行 −

employee = {“EmployeID”: “Employee Unique Identity!”}
print (employee [‘EmployeID])

您将需要按照以下过程处理 modules −

  1. 一个 module 是一个 Python 文件,其中包含一些函数或变量。

  2. 导入您需要的文件。

  3. 现在,您可以使用 “.” (dot) 运算符访问该 module 中的函数或变量。

考虑一个名为 employee.py 的 module,其中有一个名为 employee 的函数。该函数的代码如下所示 −

# this goes in employee.py
def EmployeID():
   print (“Employee Unique Identity!”)

现在导入 module,然后访问函数 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 中有一个通用的模式 −

  1. 采用 key = value 样式容器

  2. 按键名从中取出某些内容

当将 module 与字典进行比较时,两者相似,但有以下几点除外 −

  1. 对于 dictionary ,键是字符串,语法为 [键]。

  2. 对于 module ,键是标识符,语法为 . 键。

Classes are like Modules

模块是可存储 Python 代码的专门词典,你可以用“.”操作符访问它。类是一种将函数和数据分组放置在容器中以便你可以用“.”操作符访问它们的方式。

如果你必须创建一个类似于员工模块的类,可以使用以下代码创建:

class employee(object):
   def __init__(self):
      self. Age = “Employee Age is ##”
   def EmployeID(self):
      print (“This is just employee unique identity”)

Note - 类比模块更受青睐,因为你可以原封不动地重复使用它们,而且不会造成太多干扰。对于模块,你只能将它们与整个程序合二为一。

Objects are like Mini-imports

类类似于 mini-module ,你可以用 instantiate 中提到的概念以类似于导入类的方式导入类。注意,当你实例化一个类时,你可以获得 object

你可以实例化一个对象,类似于像调用函数那样调用一个类,如下所示:

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)