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

2024-05-08 02:29:35 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,可以对类的方法使用@property修饰符,该方法允许将它用作属性。所以你不用写car.tyres(),而是写car.tyres。每次访问car::tyres时,都会运行一些方法并返回值-根据OO范式。这样,您不需要在对象中存储任何信息,而是在访问时计算它(这允许在内存和CPU时间之间进行权衡)。你知道吗

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

  1. 这在R中对于S4对象和
  2. 这是否是R的良好实践?你知道吗

至于(2)我有一种感觉,在R中更常见的方法是编写泛型函数tyres(),然后执行tyres(car)。但在我看来,这并不是一个面向对象的编程。有人能详细说明一下吗?你知道吗


Tags: 对象方法内存信息属性时间propertycpu
2条回答

我从来没有找到一个方法来做这件事。但这在R6对象中肯定是可能的。它被称为Active binding。你知道吗

R6对象允许从对象实例直接访问属性和调用成员方法,其中的^ {CD1>}操作符,类似于其他的OOP语言,如java和C++。这使得R中的OOP代码比S3和S4对象更自然。你知道吗

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中的自然方式,其优点是暴露出均匀的界面1。你知道吗

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

为什么不呢?OOP不是关于语法^ {CD1}},尽管这是一种常见的感知(由于C++、C语言、java和Python等语言的商业成功,它们都遵循这个通用语法)。实际上OOP是关于数据封装和一组松散的原则,以使对象相互通信。你知道吗

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


<> 1 旁注:目前在C++标准委员会中,在名字“统一调用语法”下引入了{{CD2>}和^ {CD3>}语法之间的等价性,这是一场激烈的争论。你知道吗

相关问题 更多 >