Of course you're right about `isinstance`, sorry for the brain fade there.

After considering all the _actual_ options I think I have a slight preference for either pre-checking for stringness (using `six.string_types`) or sticking with the current approach. I don't like `hasattr`.