Comment contrôler l'héritage lors de l'extension dynamique des classes de référence
-
26-10-2019 - |
Question
Dans un webcrawler / webscraper-cadre, je voudrais étendre dynamiquement ma base Référence de la classe URL
afin de pouvoir écrire des méthodes de spécifiques pour hôtes / domaines respectifs. Pour être clair, par dynamiquement Je veux dire quelque chose comme « Générer automatiquement les définitions de classe en tant que nouveaux domaines sont rencontrés (par exemple URL_something.com
de classe qui hérite de la classe URL
) ».
fonctionne un régal, le seul problème est que mon WebPage
classe attend la valeur de url
sur le terrain pour être de URL
de classe. Il acceptera des objets de URL_something.com
de classe comme cette hérite de URL
de classe, mais se transforme en fait l'objet dans une instance de URL
de classe. Donc, je perds les informations qu'il est en fait de URL_something.com
de classe.
Avez-vous une idée de la façon dont je peux éviter de perdre cette information cruciale?
Exemple de code
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"
La solution
Reprenant ce que Martin a dit (voir ci-dessus commentaires). R 2.14.0 corrige ce que je décrit ci-dessus