Class to help dealing with files, with lazy properties
In Python it's conventional to use a single underscore to indicate that a method is only for internal use (see PEP8). The double underscore is intended to solve a particular problem, namely avoiding conflict with a method of the same name in another class, when the classes are combined via inheritance. Since you don't have to worry about that problem here, you don't need the double underscore.
In Python 2.6 or later, a simple way to avoid magic numbers would be to make a collections.namedtuple:

from collections import namedtuple

MimeTypeAndEncoding = namedtuple('MimeTypeAndEncoding', 'type encoding')


and then in _mime_type_and_encoding write:

return MimeTypeAndEncoding(*MimeTypes().guess_type(self.abspath))


and in mime_type:

return self._mime_type_and_encoding.type


But this won't work for you because you are stuck on 2.5. But you could do much the same thing (if a bit more long-windedly) using a class:

class MimeTypeAndEncoding(object):
    def __init__(self, type, encoding):
        self.type = type
        self.encoding = encoding

In Python 3.2 or later you could implement lazy_property like this, using functools.lru_cache:

from functools import lru_cache

def lazy_property(method):
    "Decorator for a property that caches the result of the first call."
    return property(lru_cache(1)(method))


(This won't work for you because you're stuck on Python 2.5, but I think it's neat.)