gpt4 book ai didi

python - S4 对象中的属性装饰器 (R)

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:41 25 4
gpt4 key购买 nike

在 python 中,可以在类的方法上使用 @property 装饰器,使其可以用作属性。因此,您可以编写 car.tyres 而不是 car.tyres()。每次访问 car::tyres 时,都会运行一些方法并返回值 - 根据 OO 范例。通过这种方式,您不需要在对象中存储任何信息,而是在访问时对其进行计算(这允许在内存和 CPU 时间之间进行权衡)。

我现在在 R 中有一个类似的 S4 对象,想知道是否

  1. 对于 S4 对象,这在 R 中是可能的,并且
  2. 这是否是 R 中的良好做法?

至于 (2) 我觉得在 R 中更常见的方法是编写一个通用函数 tyres() 然后执行 tyres(car)。但这对我来说似乎不是 OO 编程。有人可以详细说明吗?

最佳答案

As for (2) I have a feeling that a more common way to do this in R is to write a generic function tyres() and then do tyres(car).

当然。这是 R 中的自然方式,它的优点是可以公开统一的接口(interface)1

But that doesn't seem as OO-programming to me.

为什么不呢? OOP 与语法 object.method() 无关,尽管这是一种普遍的看法(由于 C++、C#、Java 和 Python 等语言的商业成功都遵循这种通用语法)。现实OOP是关于数据封装和一组松散的原则,使对象相互交谈。

不同的语言必然会以不同的方式处理这个问题。 R6 非常巧妙地模仿了类似 Java 的面向对象语法,它的使用在某些场景中可能有意义。但是 S3 的语法同样面向对象,并且更像 R:它的语法更容易与其他 R 函数组合。


1 旁注:目前 C++ 标准委员会正在就引入 foo.bar(baz)bar( foo, baz) 语法,在绰号“统一调用语法”下。

关于python - S4 对象中的属性装饰器 (R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39573945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com