R语言面向对象编程(第一课)

R语言面向对象编程

R6简介

R6是一个单独的R包,与我们熟悉的原生的面向对象系统类型S3,S4和RC类型不一样。在R语言的面向对象系统中,R6类型与RC类型是比较相似的,但R6并不基于S4的对象系统,因此我们在用R6类型开发R包的时候,不用依赖于methods包,而用RC类型开发R包的时候则必须设置methods包的依赖。

R6类型比RC类型更符合其他编程对于面向对象的设置,支持类的公有成员和私有成员,支持函数的主动绑定,并支持跨包的继承关系。由于RC类型的面向对象系统设计并不彻底,所以才会有R6这样的包出现。

library(R6)
function (classname = NULL, public = list(), private = NULL, active = NULL, inherit = NULL, lock_objects = TRUE, class = TRUE, portable = TRUE, lock_class = FALSE, cloneable = TRUE, parent_env = parent.frame(), lock)
  • classname定义类名(字符串)
  • public定义公有成员,包括公有方法和属性(一个列表,一般首先要初始化,用到initialize类似于python中的__init__,可以认为initialize中有几个变量,我们在实例化对象的时候就需要给他传递几个参数。)
  • private定义私有成员,包括私有方法和属性。(所谓公有和私有成员,主要区别在于调用的方法上面,公有成员谁都可以调用,私有成员的调用有一定的规则。)
  • active主动绑定的函数列表。
  • inherit定义父类,继承关系。
  • lock是否上锁,如果上锁则用于类变量存储的环境空间被锁定,不能修改。
  • class是否把属性封装成对象,默认是封装,如果选择不封装,类中属性存在一个环境空间中。
  • portable是否为可移植类型,默认为可移植类型,类中成员访问需要用调用selt和private对象。
  • parent_env定义对象的父环境空间。

创建R6类和实例化对象

  • 定义一个Person类
Person <- R6Class("Person",    # 定义一个R6类
  public=list(
    hello = function(){         # 定义公有方法hello
      print(paste0("Hello"," world!"))
    }
  )
)
  • 查看Person的定义
Person
## <Person> object generator
##   Public:
##     hello: function () 
##     clone: function (deep = FALSE) 
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值