В настройках webcrawler / webscraper я бы хотел динамически расширить базовый базовый класс URL
, чтобы иметь возможность писать конкретные методы для соответствующих хостов / доменов. Просто чтобы быть понятным, под динамически я подразумеваю что-то вроде « автоматически генерирует определения классов при обнаружении новых доменов (например, класс URL_something.com
, который наследуется от класса URL
)».
Работает угощение, единственная проблема в том, что мой класс WebPage
ожидает, что значение поля url
будет класса URL
. Он будет принимать объекты класса URL_something.com
, поскольку он наследуется от класса URL
, но затем фактически превращает объект в экземпляр класса URL
. Поэтому я теряю информацию, что это на самом деле класс URL_something.com
.
Есть ли у вас какие-либо идеи о том, как я могу предотвратить потерю этой важной информации?
Пример кода
setRefClass(Class="URL", fields=list(x="character"))
setRefClass(Class="WebPage", fields=list(url="URL"))
obj <- new("WebPage", url=new("URL", x="http://www.something.com/home/index.html"))
obj$url
# Method would recognize that there is no class 'URL_something.com'
# yet and thus create it:
setRefClass(Class="URL_something.com", contains="URL")
# Another method would take care of mapping field values to
# an instance of the new class:
> url.obj <- new("URL_something.com", x="http://www.something.com/home/index.html")
> inherits(url.obj, "URL")
[1] TRUE
> obj$url <- url.obj
> class(obj$url)
[1] "URL"
# So I lose the information that it was actually of class "URL_something.com"