📜  面向对象的Python简介

📅  最后修改于: 2021-01-04 04:38:30             🧑  作者: Mango


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

本章讨论使Python编程语言成为面向对象的编程语言的功能。

语言编程分类方案

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 C, C++, C#, Objective-C

什么是面向对象编程?

面向对象是指针对对象。换句话说,它在功能上指向建模对象。这是通过描述交互对象的数据和行为来收集对象的集合,从而为复杂系统建模的众多技术之一。

Python是一种面向对象的编程(OOP),是一种编程方式,专注于使用对象和类来设计和构建应用程序。面向对象的编程(OOP)的主要支柱是继承,多态,抽象,广告封装

面向对象分析(OOA)是检查问题,系统或任务并确定对象及其之间相互作用的过程。

为什么选择面向对象的编程?

Python是使用面向对象的方法设计的。 OOP具有以下优点-

  • 提供清晰的程序结构,使您可以轻松地绘制现实世界中的问题及其解决方案。

  • 便于维护和修改现有代码。

  • 由于每个对象独立存在,并且可以轻松添加新功能而不会干扰现有功能,因此增强了程序模块化。

  • 为代码库提供了一个很好的框架,程序员可以轻松修改和修改所提供的组件。

  • 损害代码的可重用性

过程式与面向对象的编程

基于过程的编程是基于功能/过程/例程的概念从结构化编程派生而来的。在面向过程的编程中,很容易访问和更改数据。另一方面,面向对象编程(OOP)允许将问题分解为多个称为对象的单元,然后围绕这些对象构建数据和函数。它比过程或功能更强调数据。同样在OOP中,数据是隐藏的,并且不能由外部过程访问。

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

面向程序的编程(POP)与之比较。面向对象编程(OOP)。

Procedural Oriented Programming ObjectOriented Programming
Based On In Pop,entire focus is on data and functions Oops is based on a real world scenario.Whole program is divided into small parts called object
Reusability Limited Code reuse Code reuse
Approach Top down Approach Object focused Design
Access specifiers Not any Public, private and Protected
Data movement Data can move freely from functions to function in the system In Oops, data can move and communicate with each other through member functions
Data Access In pop, most functions uses global data for sharing that can be accessed freely from function to function in the system In Oops,data cannot move freely from method to method,it can be kept in public or private so we can control the access of data
Data Hiding In pop, so specific way to hide data, so little bit less secure It provides data hiding, so much more secure
Overloading Not possible Functions and Operator Overloading
Example-Languages C, VB, Fortran, Pascal C++, Python, Java, C#
Abstraction Uses abstraction at procedure level Uses abstraction at class and object Level

面向对象程序设计原理

面向对象编程(OOP)基于对象而不是动作,数据而不是逻辑的概念。为了使编程语言成为面向对象的语言,它应该具有一种机制,使之能够使用类和对象以及实现和使用基本的面向对象的原理和概念(即继承,抽象,封装和多态性)。

哎呀

让我们简要地理解面向对象编程的每个支柱-

封装形式

此属性隐藏不必要的细节,并使管理程序结构更容易。每个对象的实现和状态都隐藏在定义明确的边界后面,并且为使用它们提供了简洁明了的界面。实现此目的的一种方法是将数据设为私有。

遗产

继承(也称为泛化)使我们能够捕获类与对象之间的层次关系。例如,“水果”是对“橙色”的概括。从代码重用的角度来看,继承非常有用。

抽象化

此属性使我们可以隐藏细节并仅公开概念或对象的基本特征。例如,驾驶踏板车的人知道按下喇叭时会发出声音,但是他不知道按下喇叭时声音是如何实际产生的。

多态性

多态性意味着多种形式。即,事物或动作以不同的形式或方式存在。多态的一个很好的例子是类中的构造函数重载。

面向对象的Python

Python编程的核心是对象OOP ,但是您不必通过将代码组织到类中来限制自己使用OOP。 OOP增强了Python的整个设计理念,并鼓励采用一种干净实用的编程方式。 OOP还可以编写更大和复杂的程序。

模块与类和对象

模块就像“字典”

处理模块时,请注意以下几点-

  • Python模块是封装可重用代码的软件包。

  • 模块位于带有__init__.py文件的文件夹中。

  • 模块包含函数和类。

  • 使用import关键字导入模块。

回想一下,字典是一个键值对。这意味着,如果您有一个带有密钥EmployeID的字典,并且想要检索它,那么您将必须使用以下代码行-

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

您将必须按照以下过程来处理模块-

  • 模块是一个Python文件,其中包含一些函数或变量。

  • 导入您需要的文件。

  • 现在,您可以使用“。”访问该模块中的函数或变量。 (点)运算符。

考虑一个名为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]。

  • 对于模块,键是标识符,语法是.key。

类就像模块

Module是一个专门的字典,可以存储Python代码,因此您可以使用’。’来获取它。操作员。类是对功能和数据进行分组并将其放置在容器中的一种方式,以便您可以使用“。”进行访问。运算符。

如果您必须创建类似于employee模块的类,则可以使用以下代码进行操作-

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

–与模块相比,类是首选的,因为您可以按原样重用它们,而不会造成太大干扰。使用模块时,整个程序只有一个。

对象就像小型导入

一个类就像一个微型模块,您可以使用与实例化类似的方式导入类,即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)