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