Rob Conner wrote: > By chance... does anyone know, if I wrote a class, and just wanted to > override __new__ just for the fun of it. What would __new__ look like > so that it behaves exactly the same as it does any other time.
Simple: class C(object): def __new__(cls, *args, **kwargs): return super(C, cls).__new__(cls, *args, **kwargs) Basically, you're calling object's __new__ method, which in CPython does something like mallocing the appropriate amount of memory, setting the __class__ attribute of the object, etc. Note that __new__() doesn't call __init__(). Both __new__() and __init__() are called individually by the metaclass. For new-style classes, "type" is the metaclass, and it's __call__() method looks something like: def __call__(cls, *args, **kwargs): obj = cls.__new__() if not isinstance(obj.__class__, cls): return obj obj.__class__.__init__(obj, *args, **kwargs) return obj (But see Objects/typeobject.c:409 for the full gory details.) STeVe -- http://mail.python.org/mailman/listinfo/python-list