首页 > 解决方案 > OOP - Python 类/R 类比

问题描述

我将如何在 R 中构造这个 OOP 逻辑?

我一直在阅读 S4 周围的内容,但翻译很困难。

class myclass(object):

    def __init__(self, foo):
        self.foo = foo 
        self.bar = self.cal_bar()
  
    @classmethod
    def some_func(self):
 
        global VAR
        t = do.something(VAR)
        return t

标签: pythonr

解决方案


R 有几个类系统,其中 S3 和 S4 是最常见的,而参考类、R6(以及一些非标准系统,如 R.oo 和 proto)看起来更接近于 C++ 或 Java 中已知的系统。

这里有一个参考类的例子:

myclass <- setRefClass("myclass",
  fields = c("foo"),
  methods = list(
     bar = function() {
       t <- 2 * .self$foo
       t
     }
   )
)

 
obj <- myclass(foo=2) 

obj$bar()

...以及S4的示例:

setClass("myS4class", representation(foo = "numeric"))

setGeneric("bar", function(obj, ...) standardGeneric("bar"))

setMethod("bar", "myS4class",
          function(obj, ...) {
            2 * obj@foo
          }
)          

obj <- new("myS4class", foo=2)

bar(obj)

参考类和 R6 很酷而且非常灵活。它们有时是有利的,但在大多数情况下,S3 和 S4 在 R 中更自然。我自己花了一段时间才意识到这一点。S3 和 S4 所谓的函数式方法看起来与我们从其他语言中所知道的不同,但便于以数据为中心的分析。

这当然是自以为是,所以我建议尝试一下。互联网上有很多关于这方面的资源,这里有两个例子:


推荐阅读