python - 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
解决方案
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 所谓的函数式方法看起来与我们从其他语言中所知道的不同,但便于以数据为中心的分析。
这当然是自以为是,所以我建议尝试一下。互联网上有很多关于这方面的资源,这里有两个例子:
推荐阅读
- angular - 我试图通过主题 [ngx-monaco-editor] 在 onMonacoLoad 之后创建 NgxEditorModel
- javascript - 如何在不知道端口的情况下通过 node.js 连接到“In-Sight OPC Server”?
- bash - EPG(电子节目指南)脚本
- java - 如果服务器超时处理请求,要发送的正确 http 响应代码是什么?
- azure - 有没有办法在 Azure 服务结构集群中发送电子邮件警报
- jquery - System.ArgumentNullException:值不能为空。jQuery 数据表
- javascript - 单击后退按钮重定向到另一个页面
- powerapps - 提交新项目表单并打开同一项目进行编辑
- javascript - 电子分布构建显示空白页
- c# - 如何过滤从excel文件导入的datagridview中的列