Допустим, у меня есть класс R6 Person
:Изменить инициализацию метод в подклассе класса R6
library(R6)
Person <- R6Class("Person",
public = list(name = NA, hair = NA,
initialize = function(name, hair) {
self$name <- name
self$hair <- hair
self$greet()
},
greet = function() {
cat("Hello, my name is ", self$name, ".\n", sep = "")
})
)
Если я хочу создать подкласс, чей initialize
метод должен быть одинаковым для добавления еще одной переменной self
кроме как бы я это сделал?
Я попытался следующие:
PersonWithSurname <- R6Class("PersonWithSurname",
inherit = Person,
public = list(surname = NA,
initialize = function(name, surname, hair) {
Person$new(name, hair)
self$surname <- surname
})
)
Однако, когда я создаю новый экземпляр класса PersonWithSurname
Поля name
и hair
являются NA
, то есть значение по умолчанию класса Person
.
PersonWithSurname$new("John", "Doe", "brown")
Hello, my name is John.
<PersonWithSurname>
Inherits from: <Person>
Public:
clone: function (deep = FALSE)
greet: function()
hair: NA
initialize: function (name, surname, hair)
name: NA
surname: Doe
В Python
я хотел бы сделать следующее:
class Person(object):
def __init__(self, name, hair):
self.name = name
self.hair = hair
self.greet()
def greet(self):
print "Hello, my name is " + self.name
class PersonWithSurname(Person):
def __init__(self, name, surname, hair):
Person.__init__(self, name, hair)
self.surname = surname
На самом деле в Python можно использовать '', а не имя супер() родительского класса. Это предотвращает ошибки. –