changing how instances are "created"

John Roth newsgroups at jhrothjr.com
Mon Jun 13 01:41:21 CEST 2005


"newseater" <kbilsted at hotmail.com> wrote in message 
news:1118617483.215438.318980 at o13g2000cwo.googlegroups.com...
> Hello. I need to be able to control how objects are created. Sometimes
> when creating an object, i want to reuse another object instead. I've
> searched for factory method implementations and singleton
> implementations. They were too much of a hack!
>
> My first attempt of doing this was to play around with the __new__()
> method. But i didn't quite succed. Then i came up with making a static
> method which can create my instances or re-use other instances.
> However, the below code I cannot get to work :(
>
> class Creator
> def createInstance(cls, *args, **kwargs):
> anewinstance = cls.__new__(cls, *args, **kwargs)
> anewinstance.__init__(*args, **kwargs)
>
> return anewinstance
> createInstance = staticmethod(createInstance)
>
>
> can anyone help??

__new__ is the proper way to do this, but making it work
is a bit tricky. If you could post the code you tried to
get to work for __new__(), we could critique it.

The current documentation is in 3.3.1 of the Python
Reference Manual (Python 2.4 version). In earlier
versions, there were a couple of other documents
that did a better (IMO) job of explaining things.

The trick is that __new__ must return an instance.
It can be a newly created instance (and the doc shows
how to do this) or an existing instance of any new style
class.

By the way - when you post code, please use spaces
for indentation. There are a number of popular mail
clients that don't play fair with tabs, and people using
these clients will frequently ignore code that isn't
properly indented.

John Roth




More information about the Python-list mailing list