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'>,)