[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