Нет, не существует стандартного способа сделать это из определения вашего класса, как это было бы в python.
В Python вы бы сделали что-то вроде MyObject.my_method()
, тогда как в R с S3 или S4 это будет my_method(MyObject)
, так что это будет похоже на my_function(MyObject)
. Разница лишь в том, что вызванная вами функция отправляет вызов адекватному методу. Определение этих методов для нескольких классов выполняется следующим образом:
mean <- function (x, ...) UseMethod("mean", x)
mean.numeric <- function(x, ...) sum(x) / length(x)
mean.data.frame <- function(x, ...) sapply(x, mean, ...)
mean.matrix <- function(x, ...) apply(x, 2, mean)
mean.default <- function(x, ...) {
# do something
}
Однако, если вы вызываете функцию среднего для класса, для которого не определен ни один метод, решать это должна функция, а не класс.
Тогда у вас есть RC и S6 объекты, которые имеют более похожий на питон синтаксис (MyObject$my_method()
), однако они просто выдают ошибку, что нет соответствующего поля или метода для класса, который вы использовали .
Error in envRefInferField(x, what, getClass(class(x)), selfEnv) :
"my_method" is not a valid field or method name for reference class “MyObject”
Вот некоторые сведения об OO-программировании в R .