class ChildTracker(type):
def __new__(cls, name, bases, dict_):
new_class = type.__new__(cls, name, bases, dict_)
# Check if this is the tracking class
if '__metaclass__' in dict_ and dict_['__metaclass__']==ChildTracker:
new_class.child_classes = {}
else:
# Add the new class to the set
new_class.child_classes[name] = new_class
return new_class
class BaseClass(object):
__metaclass__ = ChildTracker
class Child1(BaseClass):
pass
class Child2(BaseClass):
pass
print BaseClass.child_classes.keys()