On 12 mai, 18:10, Matthew Wilson <[EMAIL PROTECTED]> wrote: > I have been experimenting with metaclasses lately. It seems possible to > define a metaclass by either subclassing type and then either redefining > __init__ or __new__. > > Here's the signature for __init__: > > def __init__(cls, name, bases, d): > > and here's __new__: > > def __new__(meta, classname, bases, d): > > Every metaclass I have found monkeys with d, which is available in both > methods. So when is it better to use one vs the other?
Well... The __new__ method is responsible for creating and returning a new instance (so in this case, a new class), which is then passed to the __init__ method. So which one you want to use depends on what you want to do. If you only want to add some attributes/methods, register either the class or some of it's methods somewhere etc, then __init__ is fine. If you have to transform / replace / whatever some of the (not yet) attributes, fiddle with the inheritance tree, cache the class object or such things, you'd better do it in __new__. -- http://mail.python.org/mailman/listinfo/python-list