moving methods from class to instance of other class

lars van gemerden lars at rational-it.com
Thu Jun 28 04:14:23 EDT 2012


On Jun 28, 9:22 am, Benjamin Kaplan <benjamin.kap... at case.edu> wrote:
> On Wed, Jun 27, 2012 at 11:59 PM, lars van gemerden
>
>
>
>
>
>
>
>
>
> <l... at rational-it.com> wrote:
> > Hi all,
>
> > I have some trouble with the following question: Let say i have the
> > following classes:
>
> > class A(object):
> >    def __init__(self):
> >        self.name = 'a'
> >    def do(self):
> >        print 'A.do: self.name =', self.name
>
> > class B(object):
> >    def __init__(self):
> >        self.name = 'b'
>
> > The question is: How do i move the 'do' method from A to b (resulting
> > in  printing "A.do: self.name = b")?
>
> > I have tried (with a = A() and b  B()):
>
> > B.do = types.MethodType(A.do, b) #Error
>
> > and stuff like:
>
> > b.do = a.do
> > b.do()
>
> > But either i get an error or b.do() prints  "A.do: self.name = a", so
> > the self parameter of a.do is stored somehow in the method.
>
> > In other words, how do i unbind 'do' from a/A and bind it to b (the
> > instance)?
>
> > Cheers, Lars
>
> Is there any particular reason you can't just have B be a subclass of
> A? You could do
>
> b.do = types.MethodType(A.do.im_func, b, B)
>
> but there's no point in re-inventing the wheel.

Perfect, Thank you,

As to the why, to make a long story short, actually instantiation
would fit better conceptually than inheritance in this case, but that
would mean the 'A' instances would be types, which introduces
metaclasses, which i tried but i ran into problems with e.g. pickle
and with complexity.

Cheers, Lars



More information about the Python-list mailing list