2016-01-30 20 views
5

Piszę pakiet hOCR::Element na HTML::Element, aby obsłużyć zawartość hOCR. W związku z tym obiekt z klasy hOCR::Element dziedziczy wszystkie metody należące do HTML::Element.Jak uczynić wszystkie odziedziczone metody obiektami podklasy?

Ale istnieje szereg istotnych metod z HTML::Element (takich jak find_by_tag_name i look_down), które zwracają HTML::Element obiektów, widzę siebie konieczności pisania dla każdego takiego sposobu odpowiedniego sposobu hOCR::Element otoki, które po prostu mapuje przez błogosławieństwo jako hOCR co jest podany jako HTML.

Na przykład:

package hOCR::Element; 

use HTML::Element; 
use parent 'HTML::Element'; 

sub new { 
    my ($class, %params) = @_; 
    my $self = $class->SUPER::new (%params); 
    return bless $self, $class; 
} 

sub look_down { 
    my $self = shift; 
    return map { bless $_, 'hOCR::Element' } $self->SUPER::look_down (@_); 
} 

1; 

Jak mam podklasa dziedziczy wszystkie metody z klasy bazowej w taki sposób, że te odpowiednie metody powrotu podklasa obiektów zamiast obiektów klasy bazowej, bez konieczności pisania otoki dla każdej takiej metody macierzystej?

+1

Można rozważyć napisanie [ 'AUTLOAD'] (http://perldoc.perl.org/perlsub.html#Autoloading) podprogram zamiast dziedziczenie z' HTML :: Element', ale to trochę brzydki – Borodin

+0

Dzięki. Czy byłoby to po prostu brzydkie, czy może wpędziłoby mnie to w poważne kłopoty? –

+0

Nie widzę żadnych zagrożeń. – Borodin

Odpowiedz

-2
sub look_down { 
    my $self = shift; 
    return bless $self->SUPER::look_down (@_) ,HTML::Element ; 
} 
+1

OP wymaga rozwiązania * "bez konieczności pisania opakowania dla każdej z tych metod macierzystych" * – Borodin