【发布时间】:2018-05-20 01:58:26
【问题描述】:
我有类属性,例如。 g.,在某个基类中创建对象的计数器,
package A;
our $counter = Counter->new; # not just a counter in fact, so initialization code should be inherited by descendants as well
sub new {
$counter++;
bless {}
}
sub get_counter {
$counter
}
package B;
use base 'A';
package main;
B->get_counter();
我希望包 B 有他自己的这个类属性的副本(例如,只计算 B 类的对象),并且从包 A 继承的所有方法都应该处理这个副本。在普通 perl 和 Moo/Moose 中实现这个的正确方法是什么?似乎 MooX::ClassAttribute 不能被继承。 一个丑陋的解决方案是在每个后代中重复属性初始化代码,并在祖先的方法中使用像 ${"${class}::counter"} 这样的符号取消引用来使用实际包名访问这个属性。但似乎应该有更优雅的方式。
【问题讨论】:
标签: perl oop inheritance