class TargetFactory: @staticmethod def createAllTargets(): result = dict() glo = globals() # Save globals so the dict does not change during execution of the script for key in glo: if type(glo[key]) is not type: continue target = glo[key] if 'Target' in key: result[key] = target() elif 'Bank' in key and 'Target' not in key: targets = TargetFactory.createBankTarget(target, key) result.update(targets) # todo check with driver? return result @staticmethod def createBankTarget(target, key): bankTarget = target() targets = dict() targets[key] = bankTarget for target in bankTarget.targets: name = type(target).__name__ targets[name] = target return targets