Steven D'Aprano wrote: > I have a class that has a distinct "empty" state. In the empty state, it > shouldn't have any data attributes, but it should still have methods. > > The analogy is with a list: an empty list still has methods like append() > etc. but it has no "data", if by data you mean items in the list. > > I can construct an empty instance in the __new__ constructor, and I can > initialize an non-empty instance in the __init__ initializer, but I can't > think of any good way to stop __init__ from being called if the instance > is empty. In pseudo-code, I want to do something like this: > > class Parrot(object): > def __new__(cls, data): > construct a new empty instance > if data is None: > return that empty instance > else: > call __init__ on the instance to populate it > return the non-empty instance > > > but of course __init__ is automatically called. > > > Any suggestions for doing something like this? > > Easy: use a method whose name is something other than __init__, then don't bother to implement __init__. Note that __new__ shouldn't call __init__ anyway, that's done by the instance creation mechanism.
regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://del.icio.us/steve.holden Sorry, the dog ate my .sigline -- http://mail.python.org/mailman/listinfo/python-list