metaclass_example_1.py

Send to Kindle
home » snippets » python » metaclass » metaclass_example_1.py


from pprint import *

def simple_function_as_metaclass(name, bases, dictobj):
  print "simple_function_as_metaclass:  Constructing class %s with bases %s and dictobj %s" % (
      name, bases, pformat(dictobj))
  dictobj['metaclass_added_class_member'] = "metaclass_added_class_member_value"
  return type(name + "_2", bases, dictobj)

class C1(object):
  __metaclass__ = simple_function_as_metaclass
  a = 1
  b = 2

c1 = C1()

#  simple_function_as_metaclass:  Constructing class C1 with bases (<type 'object'>,) and dictobj {'__metaclass__': <function simple_function_as_metaclass at 0xcfc30>,
#   '__module__': '__main__',
#   'a': 1,
#   'b': 2}
#  >>> c1
#  <__main__.C1_2 object at 0xd9d90>
#  >>> C1
#  <class '__main__.C1_2'>
#  >>> c1.a
#  1
#  >>> c1.metaclass_added_class_member
#  'metaclass_added_class_member_value'
#  >>> dir(c1)
#  ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__metaclass__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'b', 'metaclass_added_class_member']
#  >>> C1.a
#  1
#  >>> C1.b
#  2
#  >>> C1.metaclass_added_class_member
#  'metaclass_added_class_member_value'
#  >>> dir(C1)
#  ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__metaclass__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'b', 'metaclass_added_class_member']
#  >>> C1.__bases__
#  (<type 'object'>,)