I don't think this needs to be a class, just a utility function or two. See here for a tighter implementation:

https://github.com/enthought/apptools/blob/master/apptools/type_registry/type_registry.py#L226

It's a bit more limited, in that it requires the `'package.module:Identifier'` form rather than allowing `'package.module.Identifier'` or `'package.module:arbitrary.expression'`. I can see the use case for the latter (i.e. getting alternative classmethod constructors on a class), but I don't think the former is necessary. It just allows two different ways to do the same thing.

You definitely want to pass empty dicts for the globals and locals in `__import__()`, and specify `level=0` to enforce absolute imports. You don't want to allow relative imports from `traits.util.symbol_importer`, and those dicts are only used for handling relative imports.