[Python-Dev] __class_init__
Thomas Heller
thomas.heller@ion-tof.com
Fri, 16 Nov 2001 17:56:34 +0100
From: "Tim Peters" <tim.one@home.com>
[__class_init__ methods]
> I pinged Guido about this (he'll fire me if I ever do that again <wink>),
> and he's really not keen on it. "The right way" is to define a custom
> metaclass instead (whose __init__ plays the role __class_init__ would have
> played if defined in the class). It makes sense to me, but I'll have to
> play with it to be convinced it's as usable.
It seems Guido is right ;-), it is easier than ever!
C:\sf\python\dist\src\PCbuild>python
Python 2.2b1+ (#25, Nov 6 2001, 21:18:43) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> class metaclass(type):
... def __init__(self, *args):
... type.__init__(self, *args)
... try:
... cls_init = getattr(self, '__init_class__')
... except AttributeError:
... pass
... else:
... cls_init.im_func(self)
...
>>> meta = metaclass('meta', (), {})
>>> class X(meta):
... def __init_class__(self):
... print "__init_class__", self
...
__init_class__ <class '__main__.X'>
>>> class Y(X):
... pass
...
__init_class__ <class '__main__.Y'>
>>> ^Z
Now I'll have to find out how to convert this to C.
Thomas