Thread Klassen-Attribut auch in der Base-Klassen nutzen
(5 answers)
Opened by Hagen at 2021-04-14 23:15 2021-04-16T19:14:39 Hagen Na jaaa, es ist Perl, und da kann die Grenze zwischen Methoden und Attributen einigermaßen fließend sein. Wenn Dich unnötig erzeugter Code stört: Du brauchst die "leere" Methode in der Eltern-Klasse nicht zu definieren. Das würde dann ein statischer Code-Checker anmeckern... aber die gibt's eh nicht für Perl. Für solche Klassen, wie Du sie hier beschreibst, bringen die Objekt-Frameworks wie Moo übrigens einiges an Ersparnis bei der Schreibarbeit. Das sähe dann so aus: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #! /usr/bin/env perl use 5.020; use strict; use warnings; package DB::Base { use Moo; has name => (is => 'ro'); sub option { my ( $self, $key ) = @_; die('missing key') unless ($key); die( 'missing option `' . $key . '`' ) unless $self->can($key); return $self->$key; } } package DB::Customer { use Moo; extends 'DB::Base'; has type => (is => 'ro', default => 'customer'); has currency => (is => 'ro', default => 'Euro'); ...; } package main; my $customer1 = DB::Customer->new(name => 'id_customer 1'); __END__; Eine offensichtliche Änderung gegenüber Deiner Implementierung ist, dass der Name nicht als Positionsparameter, sondern als Key/Value-Paar an new übergeben wird. Auch das kann man noch angleichen mit BUILDARGS, das mache ich aber nur, wenn ich den Caller-Code wirklich nicht anfassen will (oder kann). |