【发布时间】:2016-05-08 07:41:38
【问题描述】:
我正在HTML::Element 之上编写一个hOCR::Element 包来处理hOCR 内容。因此,来自hOCR::Element 类的对象继承了属于HTML::Element 的所有方法。
但是由于HTML::Element 中的许多基本方法(例如find_by_tag_name 和look_down)返回HTML::Element 对象,我认为自己必须为每个这样的方法编写一个对应的hOCR::Element 包装器通过祝福简单地将其映射为hOCR 的方法是HTML。
例如:
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;
如何让子类继承其基类的所有方法,以使这些相关方法返回子类对象而不是基类对象,而不必为每个此类父方法编写包装器?
【问题讨论】:
-
你可以考虑写一个
AUTLOAD子程序而不是从HTML::Element继承,但这有点难看 -
谢谢。会是丑陋,还是以后会给我带来真正的麻烦?
-
我没有看到任何危险
-
还可以查看 Class::Method::Modifiers。您可以通过这些列表。它不像 AUTOLOAD 那样难看,但工作量更大,灵活性也更低。我正在打电话,所以不像今天。
标签: perl oop inheritance