Overriding object methods (sometimes)

Matt S Trout dbix-class at trout.me.uk
Sat Mar 8 16:29:52 GMT 2008


On Tue, Feb 26, 2008 at 07:59:20PM +0000, Bradley Dean wrote:
> Greetings again,
> 
> On Mon, Feb 25, 2008 at 05:25:33PM +0000, Bradley Dean wrote:
> > I've recently had cause to wrap LWP::UserAgent in a child class
> > which needs to override most public methods. In doing so I've hit up
> > against a problem - these requests call each other, but I only want my
> > child-class methods to be called when I call them.
> 
> Thanks for your thoughts - I'm thinking that the composition path is the
> one to follow. On reflection what I've written is not really valid
> inheritance given that I'd like the class to behave differently when it
> calls on itself. Composition solves this problem exactly and much more
> neatly.

package MyWrapper;

use Moose;
use Method::Signatures;

has '_lwp' => (is => 'ro', isa => 'LWP::UserAgent', handles => '*');

method wrap_lwp_object ($lwp) {
  $self->new(_lwp => $lwp);
};

before method_i_want_to_wrap => method ($arg) {
  warn "First arg to method_i_want_to_wrap was $arg";
};

etc.

The Method::Signatures is probably overkill, mind :)

-- 
      Matt S Trout       Need help with your Catalyst or DBIx::Class project?
   Technical Director                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://chainsawblues.vox.com/            http://www.shadowcat.co.uk/servers/


More information about the london.pm mailing list