我在 Perl 中使用/创建了很多类,我需要在其中做的一件常见事情是访问父对象的某些属性。例如,假设我有 Class_A 和 Class_B,它们就像这样简单:
Class_A.pm
package Class_A;
use strict;
use warnings;
sub new {
my $class = shift;
my $this = {
history_data => [],
};
bless $this, $class;
}
Class_B.pm
package Class_B;
use strict;
use warnings;
sub new {
my $class = shift;
my $this = {
history_data => [],
};
bless $this, $class;
}
Class_A 可以use
Class_B 并创建一个实例作为属性。两者都有属性history_data
,但如果 Class_B 是由 Class_A 的实例创建的实例,我希望 Class_Bhitory_data
在其父对象中使用。
所以,我一直以来所做的就是在创建子实例时传递一个引用,如下所示:
#!/usr/bin/perl
use strict;
use warnings;
use Class_A;
use Class_B;
my $class_a = new Class_A;
$class_a->{instance_of_B} = new Class_B parent => $class_a;
我这样做非常简单,但是当需要使用 Class_B 时,可以通过 Class_A 中的某个方法创建该实例。这里的问题是,虽然 Class_B 有它自己的属性,但我希望它在作为其父级时使用 Class_A 的属性。
这很好用,但我有好几次想知道是否存在一种方法来做到这一点,而无需将父引用传递给子代。类似于 Perl 中已经实现的调用父对象的方法。
所以,这是我的问题。Class_B 有没有办法在不直接接收引用的情况下访问其父 Class_A 的实例?
谢谢。:-)
编辑:另一种说法是:
Class_B 有没有办法在没有传递引用的情况下说“我目前是 Class_B 的一个实例,生活在 Class_A 的一个属性中,该属性当前在它自己的属性上具有 x、y 和 z 值”?