首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

左手用R右手Python系列——面向对象编程基础

面向对象编程是程序设计中一种重要且高效的编程规范,它区别于常见的面向过程编程。在R语言以及Python的程序包开发过程中,大量使用了面向对象的编程范式。

百度百科关于面向对象编程的权威解释是:

面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。其最重要的三大特征是封装、继承、多态。

对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

R语言中的面向对象编程是通过泛型函数来实现的,R语言中现有的S3类、S4类、以及R6类等都可以实现面向对象的编程规范。

如果你还对R语言的S3、S4类不熟悉,可以参考张丹老师的这几篇博客:

张丹老师的这几篇文章详细的介绍了R语言中S3类、S4类面向对象的实现。

以下我将之前一篇介绍多进程/多线程的案例改造成基于S3、S4类的面向对象模式。

定义类

因为我们的任务是抓取天善智能主页上大数据相关的职位信息,所以类定义为GetData,而后仅仅定义了一个可调用的方法——hellobi(类中可以定义的方法调用可以有很多个。)

定义类中的可调用方法

创建类实例(同时将实例与方法绑定):

执行程序

当然你也可以在GetData类下定义多个方法,比如抓取课程信息,抓取博客文章信息等等。仅需将实例绑定到对应的方法上,那么在类中传入实例之后,类便可以自动搜寻到该实例的方法,并自动执行该实例对应方法的函数调用,R语言中的summary、plot、print函数等都是通过这种泛型函数的模式来实现的。

使用基于S4类的方法来实现以上案例的面向对象模式

注册类:

创建类

定义泛型函数:

将泛型函数作为方法与类绑定

关于S3方法与S4方法之间的区别:

在定义S3类的时候,没有显式的定义过程,而定义S4类的时候需要调用函数setClass;

在初始化S3对象的时候,只是建立了一个list,然后设置其class属性,而初始化S4对象时需要使用函数new;

提取变量的符号不同,S3为$,而S4为@;

在应用泛型函数时,S3需要定义f.classname,而S4需要使用setMethod函数;

在声明泛型函数时,S3使用UseMethod(), 而S4使用setGeneric()。

Python:

定义类:

以上便是在R语言和Python中使用面向对象编程的模式所做的爬虫写程序,仅作为学习面向对象编程思维的实战案例,至于更为详尽的关于R语言和Python中面向对象的思维及其高阶应用,还需要各位小伙伴儿参考各大主流加载包的源码,比如R语言的ggplot2包、rvest包等内部大量使用基于S3类的编程模式,Python中的主流加载库也都是如此。

欢迎关注数据小魔方qq交流群

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171224G0A5I700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券