python|面向对象-1

简介: python|面向对象-1

该文章所依赖的环境为:


image.png


从初学编程,就一直听说面向过程编程,面向对象编程,那么,它到底是什么意思呢? 面向过程又和面向对象有什么区别呢? 今天我们将通过该篇文章简单的来了解下。



简单阐述什么是 面向对象 和 面向过程


面向对象是一种程序设计方法,一般在介绍面向对象的时候,不得不提的另外一种设计方法,它就是面向过程。这里将简单介绍一下2者。


面向对象是一种基于类和对象的设计方法,以对象的角度出发,将程序中的数据和方法封装成对象,并定义对象之间的交互关系。它强调的是如何使用对象来描述现实世界中的事物及其行为,尤其强调的是抽象、封装、集成以及多态。面向对象可以使程序更加清晰、结构化、易于扩展 以及 易于维护。

面向过程则是基于步骤和函数的设计方法,将程序拆解为子任务,再将子任务拆解成语句,最后通过函数看来调用各个子任务来完成程序。


下面将通过写一个案例来说明2者的差异。


我们将收集2个数字,分别来计算 2数相乘 和 2数相加。


使用面向过程

image.png

使用面向对象:


image.png


上述一个是使用面向过程,一个是使用面向对象,粗略一看,哎,好像面向过程要更加简单对吧? 那如果我们将计算的对象扩大化呢,我们将计算3组数据的相加 和 相乘 呢?是不是使用面向对象来实现,会好的多呢?




为什么需要面向对象


我们只有2种设计方法可以使用,1是面向过程,2是面向对象,为什么需要面向对象呢? 其实可以从面向对象的优点出发。


使用面向对象优点如下:

  • 代码可重用性

在面向对象中,可以通过继承和多态实现代码的重用,避免编写相似的代码。

  • 代码可扩展性

在面向对象中,可以通过继承和多态实现代码的扩展,避免直接修改已有的代码。

  • 更好的封装性

在面向对象中,将数据和代码都整合到类中,只用暴露接口给其他接口使用,提高了程序的封装性。

  • 代码可维护性

在面向对象中,将任务拆分为小任务,再根据小任务来编写相应代码,这样有问题后,维护起来相对简单。



在python中使用面向对象


在实际开发中,不建议大家使用中文作为变量或者类名,这里仅为了方便演示。


定义类

python中,我们想使用面向对象,可以使用class关键字来定义,如我们想定义dog类,使用的语法为:

class dog


初次之外,我们还可以为类定义方法,如:

class dog:
    def eat():
        pass

这里写一个简单的例子:

image.png

上述代码,我们定义了一个dog的类,该类只有一个方法,eat,该方法需要传入2个外部参数,namesfood,函数中会调用print来打印信息。


在主函数中,我们定义了2个对象, xy , 分别调用 eat的这方法,但是传入不同的参数。

我们执行后,结果为:

image.png


构造哈数和析构函数


构造函数的作用是当我们根据类创建对象时,会自动调用构造函数,在此之前,我们需要在类中定义构造函数,构造函数使用的方法名为: __init__来定义的,例如: 上述代码中,我们可以使用构造函数来将狗的名称传入,代码修改如下:

image.png

上述代码,我们定义了一个构造函数,它将接收到一个参数names,我们将names赋值给self.names,而后在eat方法中,我们直接使用self变量即可,所以该eat方法只用传入food参数。

代码执行后,如下:


image.png



析构函数则是类创建的对象销毁的时候自动调用的方法,一般用来清理对象的资源和数据,在pytho中,析构函数使用的方法名为:__del__来定义的。我们这里举个例子:

image.png

上述代码,我们定义了一个类,名称为cache,该类中,有一个构造函数和一个析构函数,构造函数用于创建字典dbcache,析构函数用于删除该字典。还有一个方法add,该方法将新增字典的值。

我们运行后,结果为:

image.png


可以看到,我们执行del对象的时候,也出发了析构函数。



定义类中变量为私有变量


我们看到上一个例子,可以从外部访问类中的dbCache,这个其实非常不安全,作为类来说,仅需要暴露出相关接口给使用即可,而非直接修改类中的变量。这个时候,就可以引入类私有变量了。

我们修改上述程序:

image.png


上述程序,我们将变量给修改为了__dbCache,这就是类私有变量,并且增加一个方法getAll用来返回字典所有的值,在mian函数中,我们按照上述定义、获取字典的值,我们还尝试去直接获取类__dbCache的值。


代码执行为:

image.png

我们可以看到,获取队列的值,和删除队列都已经执行了,不过22行报错,报错对象没有__dbCache属性。


总结


本篇文章,我们简单介绍了一下面向对象和面向过程的区别,以及面向对象的优点,最后我们总结了如何在python中使用面向对象,包括如何定义类、构造函数、析构函数、以及 私有变量 等等。下一篇文章,我们将介绍元类。



相关文章
|
27天前
|
Python
Python进阶第一篇(Python的面向对象)
Python进阶第一篇(Python的面向对象)
|
2月前
|
存储 算法 安全
Python编程实验六:面向对象应用
Python编程实验六:面向对象应用
66 1
|
2月前
|
人工智能 自然语言处理 开发者
Python基础教程——面向对象
Python基础教程——面向对象
|
19天前
|
Python
Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
|
19天前
|
Python
Python面向对象基础与魔法方法详解
Python面向对象基础与魔法方法详解
|
19天前
|
Python
python面向对象
python面向对象
10 1
|
2月前
|
存储 对象存储 Python
Python进阶 -- 面向对象 基础
Python进阶 -- 面向对象 基础
18 2
|
2月前
|
存储 对象存储 Python
Python进阶---面向对象 补充
Python进阶---面向对象 补充
30 1
|
2月前
|
Python
Python进阶---面向对象 继承
Python进阶---面向对象 继承
16 1
|
2月前
|
架构师 开发工具 C++
最新python--类与面向对象-1,一线互联网架构师360°全方面性能调优
最新python--类与面向对象-1,一线互联网架构师360°全方面性能调优
最新python--类与面向对象-1,一线互联网架构师360°全方面性能调优

相关实验场景

更多