介绍
编程语言不断涌现,不同的方法也在不断涌现。面向对象的编程就是这样一种方法,在过去的几年里变得非常流行。
本章讨论Python编程语言的特性,使其成为面向对象的编程语言。
语言规划分类方案
Python可以在面向对象的编程方法中进行表征。 下图显示了各种编程语言的特征。 观察使其面向对象的Python的功能。
Langauage课程 | 分类 | Langauages |
---|---|---|
编程范式 | Procedural | C, C++, C#, Objective-C, java, Go |
Scripting | CoffeeScript, JavaScript, Python, Perl, Php, Ruby | |
Functional | Clojure, Eralang, Haskell, Scala | |
编译类 | Static | C, C++, C#, Objective-C, java, Go, Haskell, Scala |
Dynamic | CoffeeScript, JavaScript, Python, Perl, Php, Ruby, Clojure, Erlang | |
类型类 | 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 | C, C++, C#, Objective-C |
什么是面向对象编程?
Object Oriented意味着针对对象。 换句话说,它意味着在功能上指向建模对象。 这是用于通过其数据和行为描述交互对象的集合来对复杂系统进行建模的众多技术之一。
Python是一种面向对象编程(OOP),是一种编程方式,专注于使用对象和类来设计和构建应用程序。面向对象编程(OOP)的主要支柱是Inheritance, Polymorphism, Abstraction,广告Encapsulation 。
面向对象分析(OOA)是检查问题,系统或任务以及识别对象和它们之间的交互的过程。
为什么选择面向对象的编程?
Python采用面向对象的方法设计。 OOP具有以下优势 -
提供清晰的程序结构,可以轻松映射现实世界的问题及其解决方案。
便于维护和修改现有代码。
增强程序模块性,因为每个对象都是独立存在的,并且可以轻松添加新功能而不会干扰现有功能。
为代码库提供了一个很好的框架,程序员可以很容易地调整和修改所提供的组件。
赋予代码可重用性
程序与面向对象的编程
基于程序的编程源自基于functions/procedure/routines的概念的结构编程。 在面向过程的编程中很容易访问和更改数据。 另一方面,面向对象编程(OOP)允许将问题分解为多个称为objects的单元,然后围绕这些对象构建数据和函数。 它更强调数据而不是程序或功能。 同样在OOP中,数据被隐藏,外部程序无法访问。
下图中的表格显示了POP和OOP方法之间的主要差异。
程序导向编程(POP)与。 面向对象编程(OOP)。
程序导向编程 | 面向对象的编程 | |
---|---|---|
Based On | 在Pop中,整个重点是数据和功能 | 糟糕的是基于现实世界的场景。整个程序被分成称为对象的小部分 |
Reusability | 有限代码重用 | 代码重用 |
Approach | Top down Approach | 面向对象的设计 |
Access specifiers | Not any | 公共,私人和受保护 |
数据移动 | 数据可以自由地从功能移动到系统中的功能 | 在Oops中,数据可以通过成员函数相互移动和通信 |
数据访问 | 在pop中,大多数函数使用全局数据进行共享,可以在系统中从函数到函数自由访问 | 在Oops中,数据不能在一个方法之间自由移动,它可以保存在公共或私有中,因此我们可以控制数据的访问 |
数据隐藏 | 在pop中,如此具体的隐藏数据方式,所以安全性稍差一点 | 它提供了数据隐藏,更加安全 |
Overloading | 不可能 | Functions and Operator Overloading |
Example-Languages | C, VB, Fortran, Pascal | C++, Python, Java, C# |
Abstraction | 在程序级别使用抽象 | 在类和对象级别使用抽象 |
面向对象程序设计原理
面向对象编程(OOP)基于objects的概念而不是动作,而不是逻辑。 为了使编程语言面向对象,它应该具有一种机制,使得能够使用类和对象以及基本的面向对象原则和概念的实现和使用,即继承,抽象,封装和多态。
让我们简单了解面向对象编程的每个支柱 -
封装 (Encapsulation)
此属性隐藏了不必要的详细信息,使管理程序结构变得更加容易。 每个对象的实现和状态都隐藏在明确定义的边界之后,并提供了一个干净简单的界面来处理它们。 实现此目的的一种方法是将数据设为私有。
继承(Inheritance)
继承,也称为泛化,允许我们捕获类和对象之间的层级关系。 例如,“水果”是“橙色”的概括。 从代码重用的角度来看,继承非常有用。
抽象(Abstraction)
此属性允许我们隐藏细节并仅显示概念或对象的基本特征。 例如,驾驶踏板车的人知道在按下喇叭时发出声音,但他不知道在按下喇叭时声音是如何实际产生的。
多态性(Polymorphism)
多态性意味着多种形式。 也就是说,事物或行为以不同的形式或方式存在。 多态的一个很好的例子是类中的构造函数重载。
Object-Oriented Python
Python编程的核心是object和OOP ,但是您不必通过将代码组织到类中来限制自己使用OOP。 OOP增加了Python的整体设计理念,并鼓励一种干净,实用的编程方式。 OOP还可以编写更大更复杂的程序。
模块与类和对象
模块就像“字典”
在使用模块时,请注意以下几点 -
Python模块是一个封装可重用代码的包。
模块驻留在一个带有__init__.py文件的文件夹中。
模块包含函数和类。
使用import关键字导入模块。
回想一下,字典是key-value对。 这意味着如果你有一个带有密钥EmployeID的字典,并且你想要检索它,那么你将不得不使用以下代码行 -
employee = {“EmployeID”: “Employee Unique Identity!”}
print (employee [‘EmployeID])
您必须使用以下过程处理模块 -
模块是一个Python文件,其中包含一些函数或变量。
导入所需的文件。
现在,您可以使用'。'访问该模块中的函数或变量。 (dot)运算符。
考虑一个名为employee.py的模块,其中包含一个名为employee.py的函数。 该函数的代码如下 -
# 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样式容器
通过密钥的名称获取一些东西
将模块与字典进行比较时,两者都相似,但以下情况除外 -
在dictionary的情况下,键是字符串,语法是[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”)
Note - 类比模块更受欢迎,因为您可以按原样重用它们,而不会受到太多干扰。 使用模块时,您只有一个与整个程序。
对象就像迷你进口
类就像一个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)