On Tue, 18 Mar 2008 01:08:45 +0100, Dominik Jain wrote: > Hi! > > Does anyone know how an instance of a (new-style) class can be created > without having to call the constructor (and providing the arguments it > requires)? With old-style classes, this was possible using new.instance. > Surely there must be a simple way to do this with new-style classes, too > -- or else how does pickle manage?
I don't think you can create an instance without calling __new__. (At least not without all sorts of metaclass tricks.) Creating the instance is what __new__ does. But you can create a new instance without calling the initialiser __init__. Here's a variation on a recipe from Alex Martelli: class Spam(object): def __init__(self, *args): print "spam spam spam spam" self.args = args def empty_instance(cls): class Empty(cls): def __init__(self): pass x = Empty() x.__class__ = cls return x >>> # Create a Spam instance the regular way ... a = Spam("args") spam spam spam spam >>> # And a Spam instance the unusual way ... b = empty_instance(Spam) >>> a.args ('args',) >>> b.args Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'Spam' object has no attribute 'args' -- Steven -- http://mail.python.org/mailman/listinfo/python-list