os.path currently defines everything as using unicode. But most functions accept both str and unicode.
E.g. os.path.isdir uses os.stat() underneath, which does PyArg_ParseTuple(args, "et"). Hence it supports str and unicode. (And character buffer objects, for that matter)
os.path should use AnyStr.