Orri Ganel wrote:
Hello all,

As part of a project i'm doing (mostly for the fun of it), I have a
class which creates a sort of wrapper around any object to make it
suitable for use in a custom container.  However, if the class
receives an already wrapped object, I want it to just return the
object (same id and everything as the original). Now, the following
seems to work in the __init__ method (due to output), but then it
disappears as soon as the __init__ method is left:

class Node:
...
def __init__(self, cargo=None, prev=None, next=None, nod=False):
               """x.__init__(...) initializes x; see
x.__class__.__doc__ for signature"""
               if not isinstance(cargo, Node) or nod:
                   self.cargo = cargo
                   self.prev = prev
                   self.next = next
               else:
                   self = cargo
                   print id(self), id(cargo)
                   print self.cargo


a = Node(1)
b = Node(a)

12932600 12932600 1

id(b)

12960632

Any ideas on why this happens, or suggestions as to how to implement
the behavior I'm looking for (in which b and a would refer to the same
object, have the same id, etc.), would be greatly appreciated.

Thanks in advance,
Orri



Orri,

Maybe you could use a factory. It would allow you to simplify your Node class, and encapsulate the instantiation behavior you want outside the class.


class Node(object): def __init__(self,cargo=None,prev=None,next=None): self.cargo = cargo self.prev = prev self.next = next

def factory(cargo=None,prev=None,next=None):
    if isinstance(cargo,Node):
        return cargo
    else:
        return Node(cargo,prev,next)


n1 = factory(1) print id(n1) n2 = factory(n1) print id(n2)


Good luck,

Rich
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to