(st для cls, st в MY_TYPES.iteritems (), если cls в getmro (ClassB))
Более простой способ написать это будет:
(st for cls, st in MY_TYPES.iteritems() if issubclass(ClassB, cls))
Однако это не находит «ближайшего» совпадения; если бы «объект» был в поиске, он мог бы соответствовать всему! Если в поиске были вещи, которые были подклассами других вещей, или вы хотели поддерживать множественное наследование, вам нужно было бы выбрать тот, который был первым в MRO:
for cls in inspect.getmro(ClassB):
if cls in MY_TYPES:
print MY_TYPES[cls]
break
else:
print 'Dunno what it is'
Во всяком случае ... Я бы вообще рассматривал поиск типов как небольшой запах кода, разве нет лучшего способа сделать то, что вы хотите?