On Jun 28, 9:22 am, Benjamin Kaplan <benjamin.kap...@case.edu> wrote: > On Wed, Jun 27, 2012 at 11:59 PM, lars van gemerden > > > > > > > > > > <l...@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 -- http://mail.python.org/mailman/listinfo/python-list