2016-01-30 23 views
5

Tôi đang viết một gói hOCR::Element ở trên cùng của HTML::Element để xử lý nội dung hOCR. Theo đó, một đối tượng từ lớp hOCR::Element kế thừa tất cả các phương thức thuộc về HTML::Element.Làm thế nào để làm cho tất cả các phương thức kế thừa trả về các đối tượng lớp con?

Nhưng vì có một số phương pháp cần thiết từ HTML::Element (như find_by_tag_namelook_down) mà trở HTML::Element đối tượng, tôi thấy bản thân mình cần phải viết cho từng phương pháp như vậy tương ứng với phương pháp hOCR::Element wrapper mà chỉ đơn giản bản đồ bằng cách ban phước như hOCR gì nó được đưa ra là HTML.

Ví dụ:

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; 

Làm thế nào tôi có thể có một lớp con kế thừa toàn bộ các phương pháp từ lớp cơ sở của nó trong một cách mà các phương pháp đó có liên quan trở lại các đối tượng lớp con thay vì đối tượng lớp cơ sở, mà không cần phải viết một wrapper cho mỗi phương thức cha mẹ như vậy?

+1

Bạn có thể xem xét viết một chương trình con ['AUTLOAD'] (http://perldoc.perl.org/perlsub.html#Autoloading) thay vì kế thừa từ' HTML :: Element', nhưng đó là một chút xấu xí – Borodin

+0

Cảm ơn. Nó sẽ chỉ là xấu xí hoặc nó có thể làm cho tôi gặp rắc rối thực sự sau này? –

+0

Tôi không thấy bất kỳ mối nguy hiểm nào – Borodin

Trả lời

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

OP yêu cầu giải pháp * "mà không cần phải viết trình bao bọc cho mỗi phương thức cha mẹ như vậy" * – Borodin

Các vấn đề liên quan