我可以在不实现子构造函数的情况下生成Perl子类吗?
在Perl中,不实现构造函数就可以生成子类吗?我不需要任何特定于子类的构造函数行为,所以我希望从父类继承 在本例中,我有一个基类我可以在不实现子构造函数的情况下生成Perl子类吗?,perl,Perl,在Perl中,不实现构造函数就可以生成子类吗?我不需要任何特定于子类的构造函数行为,所以我希望从父类继承 在本例中,我有一个基类base.pm和一个子类child.pm。子类类应该简单地重写其父类的一个方法: # test.pl use strict; use warnings; use Child; my $o = Child->new(); $o->exec(); - - 当我运行test.pl时,基类的exec方法被执行(我假设这是因为对象在Base.pm构造函数中被称为B
base.pm
和一个子类child.pm
。子类
类应该简单地重写其父类的一个方法:
# test.pl
use strict;
use warnings;
use Child;
my $o = Child->new();
$o->exec();
-
-
当我运行test.pl时,基类的exec方法被执行(我假设这是因为对象在Base.pm
构造函数中被称为Base
)
有没有一种方法可以实现一个子类而不必重新实现构造函数 是的
您实际上具备以下条件:
sub new {
return bless({});
}
sub new {
my $class = shift;
return bless({}, $class);
}
将其替换为以下内容:
sub new {
return bless({});
}
sub new {
my $class = shift;
return bless({}, $class);
}
基本上,总是使用的双参数形式
如何编写构造函数:
- 基类:
sub new { my ($class, ...) = @_; my $self = bless({}, $class); $self->{...} = ...; return $self; }
- 派生类:
sub new { my ($class, ...) = @_; my $self = $class->SUPER::new(...); $self->{...} = ...; return $self; }
sub new {
my ($class, ...) = @_;
my $self = $class->SUPER::new(...);
$self->{...} = ...;
return $self;
}