Marc 'BlackJack' Rintsch <[EMAIL PROTECTED]> writes: > On Thu, 08 May 2008 08:55:35 -0700, krustymonkey wrote: > >> The thing is, I'm not using slots by choice. I'm using the standard >> lib "socket" class, which apparently uses slots. > > `socket` objects can't be pickled. Not just because of the > `__slot__`\s but because a substantial part of their state lives in > the operating system's space.
Of course, if it makes sense to pickle sockets in the application, one is can do so by defining __getstate__ and __setstate__: class Connection(object): def __init__(self, host, port): self.host = host self.port = port self.init_sock() def init_sock(self): self.sock = socket.socket() self.sock.connect((host, port)) ... init communication ... def __getstate__(self): # pickle self as a (host, port) pair return self.host, self.port def __setstate__(self, state): # reinstate self by setting host and port and # recreating the socket self.host, self.port = state self.init_sock() -- http://mail.python.org/mailman/listinfo/python-list