On 6/28/2012 2:59 AM, lars van gemerden wrote:

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")?

If you want to move the method from class A to class B
(which is normally more sensible than to instance b of B)

B.do = A.do.im_func  # Python 2
B.do = A.do  # Python 3
b = B()
b.do()
# print (with print adjusted for PY3)
A.do: self.name = b

If you want a B instance to act like an A instance, you can change its class (subject to some limitations). The following works.

b = B()
b.__class__ = A
b.do()

If make the change temporary and the reversion automatic, write a context manager.

--
Terry Jan Reedy



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to