This is a case for meta class. Meta classes are the classes which customize the construction of other classes.
# Define the metaclass
class metacls(type):
counter = 0
def __new__(meta_class, name, bases, attributes):
attributes['id'] = metacls.counter
metacls.counter += 1
return type.__new__(meta_class, name, bases, attributes)
# Set the metaclass
class Master(object): __metaclass__ = metacls
class Slave1(Master): pass
class Slave2(Master): pass
class Slave3(Master): pass
print Slave1.id, Slave1().id
# 1 1
print Slave2.id, Slave2().id
# 2 2
print Slave3.id, Slave3().id
# 3 3