Si todo su constructor está haciendo es una llamada al constructor padre (como en el ejemplo, no es necesario escribir en absoluto simplemente dejarlo fuera y el padre ser llamado; sólo tiene que asegurarse de que el objeto ha sido bendecida en el tipo correcto:
package Parent;
use strict;
use warnings;
sub new
{
my ($class, @args) = @_;
# do something with @args
return bless {}, $class;
}
1;
si se utiliza el código anterior y tener una clase Child
declara con use parent 'Parent';
continuación, el constructor de Padres construirá adecuadamente a un niño
.
If es necesario agregar algunas propiedades en el niño, entonces lo que tenía es en gran medida correcta:
package Child;
use strict;
use warnings;
use parent 'Parent';
sub new
{
my ($class, @args) = @_;
# possibly call Parent->new(@args) first
my $self = $class->SUPER::new(@args);
# do something else with @args
# no need to rebless $self, if the Parent already blessed properly
return $self;
}
1;
Sin embargo, cuando lleva a la herencia múltiple en la mezcla, que necesidad de decidir lo que hay que hacer en cada paso del camino. Esto significa un constructor personalizado para cada clase que decide cómo fusionar las propiedades de Parent1 y Parent2 en el elemento secundario y, finalmente, bendice el objeto resultante en la clase Child. Esta complicación es una de las muchas razones por las que la herencia múltiple es una mala elección de diseño. ¿Ha considerado rediseñar su jerarquía de objetos, posiblemente moviendo algunas propiedades a roles? Además, es posible que desee emplear un marco de trabajo de objetos para llevar a cabo parte del trabajo ocupado, como Moose. Hoy en día, rara vez es necesario escribir un constructor personalizado.
(Por último, se debe evitar el uso de las variables $a
y $b
, sino que son tratados de manera diferente en Perl, ya que son las variables utilizadas en funciones de clasificación y algunos otros muebles empotrados.)
, gracias, esta parece ser la forma más fácil de convertir mi código actual a algo que funciona. – Zitrax