Hmmm..  One more thing.  It looks like you always use the combination:
```
if type_criterion(other):
    check_image_consistency(self, other)
```
So perhaps, the `type_criterion` bit should just be part of `check_image_consistency` where the check would only happen if the second "image" is really an image.