class LimitExceededException(Exception):
    pass

class limit_instances:
    def __init__(self, limit):
        self.limit = limit

    def __call__(self, cls):
        prev_new = cls.__new__
        cls.__num = 0
        def __new__(cls, *a, **kw):
            cls.__num += 1
            if cls.__num > self.limit:
                raise LimitExceededException()
            return prev_new(cls, *a, **kw)
        cls.__new__ = __new__
        return cls

@limit_instances(5)
class C:
    pass

for n in range(10):
    c=C()
    print(c)