[Python-Dev] New metaclass pattern (Was Re: Simulating Class (was Re: Does Python have Class methods)) (original) (raw)

Thomas Heller thomas.heller@ion-tof.com
Wed, 23 May 2001 20:57:28 +0200


Let me try again (and please forgive my mistakes in the detail). The usual way (as in demo\metaclasses):

class B_Meta: ....

B = B_Meta('B', (), {})

class C(B): pass

B is an instance of the (meta)class B_Meta. C is now another instance of the same (meta)class. because B.class, which is the (meta)class itself, is called, and returns a new instance. B_Meta can (and must) implement a lot of behaviour.

In contrast, with my recipe:

def MagicFunction(name, bases, dict): ...construct a class on the fly... ...create an instance of this class... return aninstance_of_a_class

def B_Meta(): pass B_Meta.class = MagicFunction

class C(B): pass

Now C is an_instance_of_a_class (which is an instance of a normal python class), and thus does inherit the normal behaviour of Python classes.

Thomas

PS: I'm sure this all will be much better in descr-branch. I've checked it out and am playing with it from time to time, but most of the time I have to use released Python versions.