Meoo

非程序员的编程之旅——Python基础篇(6)面向对象

Meoo http://www.meoo.net 2018-01-11 10:00 出处:网络 编辑:@iCMS
作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师。      上一篇结尾谈到了面向对象编程,这其实是现在编程的一个主流思想,一个封装的思想。本系列并不要求同学们学会如何进行封装,所以本节最主要在

作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师。

非程序员的编程之旅——Python基础篇(6)面向对象

        上一篇结尾谈到了面向对象编程,这其实是现在编程的一个主流思想,一个封装的思想。本系列并不要求同学们学会如何进行封装,所以本节最主要在于理解类、对象是什么即可,有兴趣深入学习的同学在后面实战篇里可以把知识点自行进行封装。

非程序员的编程之旅——Python基础篇(6)面向对象

本文导读

非程序员的编程之旅——Python基础篇(6)面向对象

        前文所讲述的函数仅仅是对于某一个功能的封装,本文所讲述的类,将会是一个更高层面的封装。简单一些理解就是将有相同或类似特征,相同或类似的处理函数的一系列东西进行一个抽象,抽象成一个模板(类),下一次遇到类似的东西的时候,我不用重新编写处理函数,不用重新定义有哪些特征变量,直接对这个模板进行实例化(创建对象)。

非程序员的编程之旅——Python基础篇(6)面向对象

        咳咳,学习数据分析写的程序不需要面向对象,不过理解什么是面向对象很重要,不然新出一个框架就看不懂怎么用了。稍微举个例子,前面讲到的列表,列表类型在python中便是一个类,它内部有各种列表的处理函数(方法),也有列表的一些特征(例如列表长度)。但是现在的列表还属于一个抽象中的东西,当我们使用list创建出一个真实的列表的时候,那么列表的各种方法、特征都将会适用于所创建出的真实列表。

非程序员的编程之旅——Python基础篇(6)面向对象

(来自excel的嘲讽)

01

初始类

在python中使用class关键字定义类。

非程序员的编程之旅——Python基础篇(6)面向对象

有几个知识点。

1、类里直接设定的变量(如上文的字符串a),使用范围仅仅只有这个类里,该类里的所有方法(函数)均可调用。


2、类里定义函数第一个参数必须传入的是这个类本身,表示将这个函数绑定到这个类里,而self并不是python中的关键词,我可以随意取一个名字,只是用self表示能够更清晰的表示出方法中传入的第一个参数是这个类本身,例如下图。

非程序员的编程之旅——Python基础篇(6)面向对象

3、在类里的函数调用本类的变量时,一定要加上2中所说的self(或你自己取的指向本类的那个参数)。不过需要说明的是,self绑定的实际上是对象,而不是整个类(如果绑定的是整个类,那么会污染整个类的变量,那么下次再实例化对象的时候变量就不是一个父级关系),确实搞不明白就暂时放在一边,反正记着一点把类实例化成对象并不能修改类,把上图中的类稍作修改来演示这个功能,如下图所示。

非程序员的编程之旅——Python基础篇(6)面向对象

        可能这样来写还是会有不少朋友不明白使用类的作用在哪里,和对象有什么关系。就拿上面那个例子来说,模板就是myClass,其中有一个大家共用的变量a(可以进行修改),有一个大家共用的方法b。在下面和定义类同级中实例化myClass的时候,我采用a来作为myClass接地气的接收器,这就是实例化了一个对象。我们编程都是通过各种类实例化的“a”来进行串联起来的,所以叫做面向对象编程。

至于作用在哪里,我再拿上一篇爬虫的模型进行一个扩展。

非程序员的编程之旅——Python基础篇(6)面向对象

        当然,按照上图中的那种方式,也并不能看出类到底有什么作用,甚至这样来写比上一篇中的代码还要复杂一些了。同时另一个问题是,像是实例化一个列表对象的时候,不是也可以传入参数这一类的吗?这就是接下来要讲到的构造函数。


02

构造函数

        Python里并不像Java语言一样有各种权限控制,什么public、private等等都没有,但也有一些方法可以创建出一些隐藏起来的参数。其中最常用的就是使用各种下划线--->  _  <---,比如前一篇里面使用的__name__(前后各两个下划线)就是一个隐藏的全局变量。


        在类中,使用__init__来表示构造函数。将我们在实例化对象所要传入的参数,前文例子中的字符串a和url都是固定值,还没有进一步抽象到特征上。下图同样以爬虫模型为例。

非程序员的编程之旅——Python基础篇(6)面向对象

        上图中的类仅需要改变创建对象时传入的url就可以爬取不同的网页(当然解析代码部分还需要深究,因为网页结构不尽相同,使用同一个解析函数是不现实的)。


        这么做的好处,如果想自己写个程序之后以最小的改动实现强大的功能,那么把自己的代码封装到类里是一个很好的选择,之后要使用的时候,甚至都不需要改动类的源码(类的源码属于底层代码),只需要改变传入的参数值(这个传入的参数就是前篇所说的API、接口,在类里就是构造函数的使用)。


        插播一个小知识,init在python中使用较多,下一篇模块中也会有使用到,其实是initial的缩写,意思为初始化。在R语言中所有的东西都是对象(有特征,有方法),只是没有提供简便创建类的方法。

03

类的深入操作

        首先要讲解的是类的继承问题(就是可以把定义好的类的家产一股脑的传递给下一个类)。在以前python版本里,定义类时还必须继承一个object类,Python3将object类封装进了class关键词中,所以python中所创建的所有类都是继承自object类的子类。


        继承有传承和覆盖两个特性,即子类里有父类的所有特征和方法,同时子类里可以对父类的特征、方法进行修改,可以定义一些新的特征、方法。具体拿代码来演示。

非程序员的编程之旅——Python基础篇(6)面向对象

        上一篇提及了help函数,同样对于类也是适用的,就拿上图中的father类来演示一下。

非程序员的编程之旅——Python基础篇(6)面向对象

非程序员的编程之旅——Python基础篇(6)面向对象

        一开始看起来可能会有一些懵逼,但是一行一行的看下来,发现其实就是我们自己定义类的结构,有哪些参数,有什么方法,方法下面的说明就是我们用多行注释进行书写的。(也可以来一只神兽或者HelloKitty)

类也有更多的拓展知识,但目前学到这些部分就足够了。


        最后再重申一下,做数据分析,更多需要的是上层应用,仅针对对底层感兴趣的同学或想自己以后用自己写的包、模块、框架(别人的框架始终是别人的,不管金窝银窝,都没自己的狗窝舒服,为啥是狗窝?因为找不到。。。)。但是对于理解面向对象对于python的编程也是非常重要的,同时之前也说过计算机语言都是相通的,Java、JS、Go、C++、C#、PHP等等语言都是通过面向对象进行编程的,理解了计算机思想,很快就能上手一门语言。

非程序员的编程之旅——Python基础篇(6)面向对象

人生苦短我选python,本系列持续更新中,有疑问、有需求、有指教的朋友可留言或向公众号后台发送消息,后台小姐姐会及时处理并回复的。

非程序员的编程之旅——Python基础篇(6)面向对象

      重庆芝诺大数据分析有限公司是国内首批大数据技术应用解决方案的专业服务提供商,是中国商业联合会数据分析专业委员会事务所会员单位。公司基于Apache Hadoop 框架,自主研发的大数据综合分析处理平台—Zeno Data Matrix平台,提供一站式大数据开发环境和工具,包括数据抓取、清洗、储存、分布式计算、分析挖掘及可视化应用的整体解决方案。快速部署,整合数据信息,盘活数据资产,为政府、企业的经营决策提供科学支撑。

     芝诺数据现拥有近20项自主知识产权的软件专利。拥有大数据综合分析处理平台(ZDM平台)、大数据教育(实训)平台、重庆市安全生产综合服务平台、四点半课堂等。

非程序员的编程之旅——Python基础篇(6)面向对象


阅读全文

本文已收录于以下专栏:

发表评论

HTML/XML

objective-c

Delphi

Ruby

PHP

C#

C++

JavaScript

Visual Basic

Python

Java

CSS

SQL

其它

相关文章推荐

python面向对象编程基础

演示了 Python 类与对象的ji

非程序员的编程之旅——Python基础篇(6)面向对象

shuqin1984

2014-09-19 19:34

1594

黑马程序员---iOS基础---面向对象编程思想

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

非程序员的编程之旅——Python基础篇(6)面向对象

wodepei

2015-07-31 22:13

1106

伤心啊!年度热门编程语言排行榜出来了...

近期,IEEE Spectrum 发布了第四届顶级编程语言交互排行榜。结合 10 个线上数据源的 12 个标准,对 48 种语言进行了排行!此外,七牛云许式伟曾说过Go语言会取代Java...气氛...

非程序员的编程之旅——Python基础篇(6)面向对象

黑马程序员 java 基础 毕向东 面向对象

3 面向对象

3.1 面向对象介绍

3.1.1 理解面向对象

面向对象相对面向过程而言;都是一种思想

面向过程 强调的是功能行为。

面向对象 将功能封装进对象,强调具备了功能的对象;

面向...

非程序员的编程之旅——Python基础篇(6)面向对象

CAREIT

2014-08-28 22:27

1196

非程序员的编程之旅——Python基础篇(7)模块

作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师。        终于要结束python基础篇了,我的内心毫无波动,甚至还有点想笑。下一期开始系列名称将更名为数据分析师的编程之旅。在本节也终于要...

非程序员的编程之旅——Python基础篇(6)面向对象

om6032N38S7

2017-11-29 00:00

209

廖雪峰《python3基础教程》读书笔记——第九章 面向对象高级编程

第九章  面向对象高级编程

讨论多重继承、定制类、元类等概念

9.1 使用__slots__

【__slots__来限制class实例能添加的属性】

如果我们想要限制实例的属性怎么办?比如,只...

非程序员的编程之旅——Python基础篇(6)面向对象

wxfsjtu

2017-08-07 09:41

219

Java学习之旅基础知识篇:面向对象之封装、继承及多态

Java是一种面向对象设计的高级语言,支持继承、封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起。来看看最基本的类定义语法:

/*命名规则:

*类名(首字母大...

非程序员的编程之旅——Python基础篇(6)面向对象

imxiangzi

2016-05-18 16:07

758

菜鸟之旅——Java入门篇(四)面向对象

面向对象编程已成为软件设计中的一项重要技术,学习和掌握面向对象已经成为一种潮流,下面将详细介绍面向对象。

一、面向对象编程

本篇简单介绍面向对象的三个特性,这些特性会在后续中详细讲解。

1、面向对象的...

非程序员的编程之旅——Python基础篇(6)面向对象

cxy782255346

2013-09-24 22:38

409

黑马程序员——java基础--面向对象(篇二)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

第一章

1、多态              2、类型转换...

非程序员的编程之旅——Python基础篇(6)面向对象

approche

2015-02-23 16:39

220

黑马程序员——java基础--面向对象(篇一)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

第一章

1、面向对象     2、成员变量      3、匿名对象  ...

非程序员的编程之旅——Python基础篇(6)面向对象

approche

2015-02-23 13:51

245

黑马程序员——OC语言基础篇---面向对象之三大特性

本篇讲述了面向对象编程的三大特性:封装、继承和多态

非程序员的编程之旅——Python基础篇(6)面向对象

liufeng124

2015-04-15 13:11

360

0

精彩评论

暂无评论...
验证码 换一张
取 消