It seems there is no intention to ever allow >1 thing in built_mappings, in which case its usage is redundant + a bit confusing.
Could we not do something more like ...
```
    matched_types = [type 
                     for type in Mapping.__subclasses__ 
                     if type.type_match(source, target)]
    if len(matched_types) != 1:
        . . . # (error cases)
    else:
        return matched_types[0](mapping, source, target, fu_p)
```