Perl多重继承,两次继承同一个方法名:如何正确使用正确的方法?

问题描述 投票:0回答:0

嗯,我不应该使用多重继承来使用 Perl,但我还是这么做了。 考虑以下代码草图(

$self
表示当前对象):

package A;
sub f { ... }
sub _init { ...; $self->f; ... }
sub new { ... $self->_init ... }

package B;
sub _init { ... }
sub new { ... $self->_init ... }

package C;
sub f { ... }
our @ISA = qw(A B);
sub new
{
    my $class = $_[0];
    my $self = ...;
    bless $self, $class;
    ??? call A:_init using $self, call B:_init using $self, setup C's attributes
}

C->new
面临的挑战是如何集成
A
B
的构造函数(假设
_init
完成了除了祝福和分配对象之外的所有设置)。 使用
$self->SUPER::_init
只能使用两个继承方法中的一个,并且不是很明显 which (可能来自于
@ISA
首先列出的包)。

另一件事是如何确保

A::_init
f
使用动态绑定,即:使用
C::f
?具体来说,使用
A::_init($self)
不会。 具体来说,C
也可以有自己的
_init
,甚至
A
B
可以继承更多的包...

perl methods constructor multiple-inheritance
© www.soinside.com 2019 - 2024. All rights reserved.