[Python-Dev] RE: Python-Dev digest, Vol 1 #1324 - 16 msgs
Thomas Heller
thomas.heller@ion-tof.com
Mon, 23 Apr 2001 10:58:56 +0200
> Tim Peters <tim.one@home.com>:
>
> > "class methods" in *this* thread
> > is being used in a Smalltalk sense (because it's Thomas Heller's thread, and
> > he made clear that he doesn't want C++-style class statics).
Well, I shouldn't have talked about C++ static methods, because
I'm not too familiar with them.
Here's what I want:
Assume C is a class with a class-method mth,
and D is 'class D(C): pass'.
C.mth() should call this method, which in turn (automatically)
receives C itself as the first parameter.
D.mth() should call this method, which in turn (automatically)
receives D itself as the first parameter.
>
> It sounds like he wants not just class methods, but to
> unify classes and instances the way they are in Smalltalk.
The metaclass approach is one solution, not neccessarily
the best.
>
> That's not necessary *just* to get class methods. For
> instance, suppose you could write
>
> class Foo:
>
> def ftang(class c, x, y, z);
> ...
>
> where the 'class' keyword in the argument list would say
> that it is to be a class method. That special form of the
> def statement would create an 'unbound class method'
> object, whose first argument would be filled in with the
> class object when Foo.ftang was accessed.
Donald Beaudry's objectmodule uses the metaclass hook to provide
class methods. I like the resulting syntax very much: He uses an
'inner class' with the special name '__class__' to specify class
methods:
class Object(object.base):
class __class__:
def class_method(self):
pass
def normal_method(self):
pass
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.
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.
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...
>
> Hmmm... might write a PEP on that!
>
Me too.
Thomas