[Python-Dev] RE: Python-Dev digest, Vol 1 #1324 - 16 msgs
Donald Beaudry
Donald Beaudry <donb@abinitio.com>
Mon, 23 Apr 2001 14:12:36 -0400
"Thomas Heller" <thomas.heller@ion-tof.com> wrote,
> Donald Beaudry's objectmodule uses the metaclass hook to provide
> class methods. I like the resulting syntax very much:
Thank you. I like it too, especially because MyClass.__class__
returns what *I* would expect ;) and the source reflects that too.
> If I understand correctly (objectmodule does not run under 1.5.2 or
> later), an instance of __class__ will become the metaclass of
> Object, and __class__'s methods will become class methods of Object.
That's correct. I currently use objectmodule on 1.5.2. I would not
be surprised if it doesnt work on newer versions though as I have
never tried it there. Perhaps you found an out-of-date version, or
perhaps I never sent out a newer version. Regardless, I'd be happy to
get you a version that works with 1.5.2 (or upload one somewhere for
more public consumption)
> I've played a little bit with metaclasses in pure python (it is
> faster this way), and have an implementation with the same syntax
> where __class__ is never instantiated, and simply acts as a function
> container.
Ah but with the object module, it does get instantiated. In fact,
__class__ is derived (implicitly) from the __class__ of the containing
base class. Inheritance works as expected.
> Addendum: Additionaly to class methods, I would like to
> have 'magic' class methods, maybe named __class_init__
> and __class_getattr__. Easy to guess what they should do...
Objectmodule provides for that as well. Just define __init__,
__getattr__, etc., inside the __class__ definition. There is even and
__new__ which is responsible for controling the "memory allocation" of
instances. This is useful for, amoung other things, singletons.
> > Hmmm... might write a PEP on that!
> >
> Me too.
...gone are the days when a simple email to Guido was all it took to
get a proposal going ;)
--
Donald Beaudry Ab Initio Software Corp.
201 Spring Street
donb@init.com Lexington, MA 02421
...So much code, so little time...