metaclasses (beginner question)

Peter Otten __peter__ at web.de
Wed Feb 21 08:57:05 EST 2007


Laszlo Nagy wrote:

> I would like to create a hierarchy classes, where the leaves have a
> special attribute called "producer_id". In addition, I would like to
> have a function that can give me back the class assigned to any
> producer_id value. I tried to implement this with a metaclass, but I
> failed. Please help me, what I did wrong?

> class ProducerHandlerType(type):
      ...

> class A(ProducerHandlerType):
>     pass
> 
> class B(A):
>     producer_id = 1

> # Metaclass methods are not called above, and the line below prints an
> empty dict. :-(

Without looking into the details -- the (subclass of) type is meant to be
the class of the class, or the other way round, your normal classes are
instances of (a subclass of) type. You determine the factory Python uses to
make a class by adding

__metaclass__ = factory

to the class body, so you'll probably end with something like

class ProducerHandlerType(type):
    # your code 

class A:
    __metaclass__ = ProducerHandlerType

The subclasses of A will now invoke your customised metaclass machinery.

Peter



More information about the Python-list mailing list