3

我正在尝试在 R6 中创建一个从其父类继承函数的类。但是,该函数依赖于在子类中覆盖的其他“帮助”函数。

当我调用父函数时,我希望它使用父类中的帮助函数,而不是子类中被覆盖的函数。

这是我的代码如何工作的模型:

ParentClass <- R6Class(
  public = list(
    helper_fn = function() { print("Parent helper.") }, 
    main_fn = function() { self$helper_fn() } 
    }
  )
)

ChildClass <- R6Class(
  inherit = ParentClass,
  public = list(
    helper_fn = function() { print("Child helper.") },
    main_fn = function() { super$main_fn() }
  )
)

预期的行为是打印“父助手”。但是当child_class调用父级的时main_fn,它使用child_class.

child_class <- ChildClass$new()
child_class$main_fn()
# prints "Parent helper."

有可能避免这种情况吗?或者这就是重写函数的工作原理?

4

1 回答 1

0

我可能无法提供解决方案,但看起来因为父母main_fn调用了一个函数self- 并且 R 将它定向到孩子的实例而不是父母的实例。

您可以尝试helper_fn从父母那里继承并以不同的方式命名孩子的助手,childHelper_fn如果这适用于您正在尝试做的事情。

于 2021-04-07T15:32:15.170 回答