[Python-Dev] Path inherits from string
Ian Bicking
ianb at colorstudy.com
Thu Jan 26 18:00:04 CET 2006
Fredrik Lundh wrote:
>>However, I might be wrong because according to [1] it should work. And
>>having to wrap the Path object in str() (open(str(somepath))) each and
>>every time the called function expects a string is not a practical
>>solution.
>
>
> in Python, the usual way to access an attribute of an object is to
> access the attribute; e.g.
>
> f = open(p.name)
You mean "f = open(Path(p).name)", because it is likely that people will
also have to accept strings for the nearterm (and probably longeterm)
future. And the error message without will be inscrutable (and will
still be inscrutable in many cases when you try to access other methods,
sadly). And currently .name is taken for something else in the API.
And the string path is not really an attribute because the string path
*is* the object, it is not *part* of the object.
OTOH, str(path) will break unicode filenames. And unicode() breaks
anything that simply desires to pass data through without effecting its
encoding.
An open method on paths simplifies many of these issues, but doesn't do
anything for passing a path to legacy code. Changing open() and all the
functions that Path replaces (e.g., os.path.join) to accept Path objects
may resolve issues with a substantial portion of code. But any code
that does a typecheck on arguments will be broken -- which in the case
of paths is quite common since many functions take both filename and
file object arguments.
--
Ian Bicking / ianb at colorstudy.com / http://blog.ianbicking.org
More information about the Python-Dev
mailing list