嗯,我不应该使用多重继承来使用 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
可以继承更多的包...