perl中的继承和默认构造函数
我有以下代码:-perl中的继承和默认构造函数,perl,oop,inheritance,Perl,Oop,Inheritance,我有以下代码:- package A; sub new{ //constructor for A } sub hello{ print "Hello A"; } 1; package B; use base qw(A); sub hello{ print "Hello B"; } 1; 我的问题是如何实例化B,即我的$B=B->new(),而不给B一个构造函数,我需要在a中做什么更改才能实现这一点。这可能吗 谢谢。是的。将此用作A的新方法: sub new { my
package A;
sub new{
//constructor for A
}
sub hello{
print "Hello A";
}
1;
package B;
use base qw(A);
sub hello{
print "Hello B";
}
1;
我的问题是如何实例化B,即我的$B=B->new(),而不给B一个构造函数,我需要在a中做什么更改才能实现这一点。这可能吗
谢谢。是的。将此用作
A
的新方法:
sub new {
my ($cls, @args) = @_;
# ...
my $obj = ...; # populate this
bless $obj, $cls;
}
关键是当使用B->new
时,第一个参数是B
(在我的示例中,我绑定到$cls
)。因此,如果您使用$cls
调用bless
,对象将获得正确的包。根据Chris的回答,您的代码现在应该如下所示:
package A;
sub new{
my ( $class ) = @_;
my $self = {};
bless $self, $class;
}
sub hello{
print "Hello A";
}
package B;
use base qw(A);
sub hello{
print "Hello B";
}
package main;
my $b = B->new;
$b->hello;
B
简单地继承A
的构造函数。次新的{my$self={};my$arg=shift;my$class=ref($arg)| |$arg;printf(“\n\tA的构造函数\n”);$self->{NAME}=“A”祝福($self,$class);返回$self;}请建议对上述内容进行修改method@AAB:因此,将代码中对A
的所有引用更改为对$class
的引用。e、 例如,printf(“$class的构造函数”)
,和$self->{NAME}=$class
,如果您愿意的话。我尝试在我的代码中使用以下内容:-我的$a=a->new()和我的$b=b->new(),但我在$b=b->new()上遇到以下错误,它说无法通过包“b”@AAB找到对象方法“new”,Perl已经有了一个b模块。避免使用这个名字。这会导致奇怪的错误。我尝试使用上面的代码,但我倾向于得到相同的错误,即无法通过包B找到新的对象方法