User since
2004-02-03
15
Artikel
BenutzerIn
Hallo zusammen,
bin momentan dabei mich etwas in Perls OOP einzuarbeiten, habe dabei allerdings ein Problem bei der Vererbung. Und zwar habe ich bspw. die zwei Klassen/Packages A und B. Das Package B erbt dabei die new() und _init() Methoden des ersten Packages A über @ISA. Ich wollte nun in der _init() Methode eine Fallunterscheidung machen anhand des Packagenamens, den mir caller() liefert. Allerdings kann ich tun was ich will, es wird mir immer Package A als caller zurückgegeben, wenn ich über ein Objekt des Packages B die _init() Methode aufrufe. Hab ich eventuell irgendwas nicht beachtet oder ist das working as intended?
User since
2003-08-04
7321
Artikel
ModeratorIn
das wäre sowieso schlechter stil
besser
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
package A;
sub new {
# ..
}
sub _init {
...
}
1;
package B;
use base qw/A/;
use NEXT;
sub new {
# ..
}
sub _init {
my $self = shift;
$self->NEXT::_init( @_ );
# ...
}
1;
oder noch besser, gleich
Class::C3 verwenden
User since
2004-02-03
15
Artikel
BenutzerIn
danke sehr, werd ich mir mal näher anschauen.
Das mit caller() war natürlich ein Fehler meinerseits, denn caller() gibt die Daten im Kontext und nicht abhängig von der Zugehörigkeit zurück.