André a écrit :
Hi, I was trying to find a way to set, upon __init__() the parent of a
class to an existing instance.

??? Sorry but I just can't make any sense of this.

Here is a minimal example of what I'm
trying to do:

class A(object):
  def __init__(self, x):
    self.x = x

class B(A):
  def __init__(self, *args):
    if not isinstance(args[0], A):
      super(B, self).__init__(args[0])
    else:
      self = args[0]

Rebinding an argument only affect the current namespace.

    self.y = args[1]

b = B(4, 6)
print 'b:', b.x, b.y, type(b)

a = A(7)
c = B(a, 3) # Means: please set c parent's using instance "a"
print 'c:', c.x, c.y, type(c)

This does not work as can be tested. The reason I'm in search for a
solution in this area is that in our project, "A" is not copy-able (it
is written using a boost.python binding to a C++ object that does not
allow copying) - so I can't simply call, inside "B's __init__()", a
copy constructor for A.

Ok, I think I get the point... When an A instance is passed as first arg, you'd like to use this instance's state to call super(B).__init__ ?

If so, here's a possible solution (Q&D, to be corrected according to real use case, etc):

import copy

class B(A):
  def __init__(self, *args):
    if isinstance(args[0], A):
        x = copy.copy(args[0].x) # if it's a mutable and you want a copy
    else:
        x = args[0]

   super(B, self).__init__(x)
   self.y = args[1]

Be sure to carefully read copy's doc.

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

Reply via email to