likes
comments
collection
share

python|面向对象-1

作者站长头像
站长
· 阅读数 19

该文章所依赖的环境为: python|面向对象-1

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

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

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

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

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

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

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

使用面向过程

python|面向对象-1

使用面向对象:

python|面向对象-1

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

为什么需要面向对象

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

使用面向对象优点如下:

  • 代码可重用性

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

  • 代码可扩展性

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

  • 更好的封装性

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

  • 代码可维护性

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

在python中使用面向对象

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

定义类

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

class dog

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

class dog:
    def eat():
        pass

这里写一个简单的例子:

python|面向对象-1

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

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

我们执行后,结果为:

python|面向对象-1

构造哈数和析构函数

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

python|面向对象-1

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

代码执行后,如下:

python|面向对象-1

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

python|面向对象-1

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

我们运行后,结果为:

python|面向对象-1

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

定义类中变量为私有变量

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

我们修改上述程序:

python|面向对象-1

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

代码执行为:

python|面向对象-1

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

总结

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

转载自:https://juejin.cn/post/7226740776226471991
评论
请登录