pathlib

DL Neil PythonList at DancesWithMice.info
Tue Oct 1 05:20:50 EDT 2019


On 1/10/19 2:58 PM, Dan Sommers wrote:
> On 9/30/19 3:56 PM, Barry Scott wrote:
>>> On 30 Sep 2019, at 16:49, Dan Sommers 
>>> <2QdxY4RzWzUUiLuE at potatochowder.com 
>>> <mailto:2QdxY4RzWzUUiLuE at potatochowder.com>> wrote:
> 
>>> In the totality of a Path object that claims to represent paths
>>> to files,
>>
>> It represents string that *should* in most cases work in the APIs
>> that work on files. Not the same idea.
> 
> I'm not sure the documentation supports your view.  Components
> of paths are strings, but IMO the Path object represents a file.

Worse! There may be an argument for suggesting that the documentation 
supports both descriptions...


>>> including the arguably troublesome read_bytes and
>>> write_bytes methods, and a rename method, however, it's not
>>> unreasonable expect the object to track *itself* when I use *its*
>>> own rename method (backwards compatibility restraints
>>> notwithstanding).
>>
>> "the object" did track the changes its just that "the object" is not
>> the Path object, it's in the operating system and/or the file system.
>> For the rename it's the directory that the name is recorded in.
> 
> So which is it?  Does the Path object represent a string, the
> name of a file (whether that file exists or not), or the file
> itself?  A moment ago, you claimed that a Path object represents
> a string that should work in the APIs that work on files.  Now,
> you're claiming that the Path object is a proxy for something in
> the filesystem.  I don't mean to be combative or confrontational,
> but I think that this fuzziness/inconsistency is at or near the
> root of the differing expectations.

Yes, see earlier comment about "confusion" - in both the minds of 
learners/newcomers and those who are 'experienced'.


>> There was an interest talk at this years PYCON UK about the
>> the errors that people new to python make. Misunderstand syntax
>> is about 1/3 of the problems, but 2/3 was having the wrong model.
>>
>> This discussion seems to fall into the "wrong model" world that
>> leads to a expectation failure.
> 
> On this (that there's something about the model of Path objects
> that leads to expectation failures) we agree.  :-)

Are we talking about "Here's Your Mistake" 
(https://www.youtube.com/watch?v=7gMOaWdzDSw)?

You've strayed into my research area: cognitive psychology - 
understanding how people learn. Whilst we do indeed talk about "models" 
- a person's understanding of how things work and/or how they fit together.

"Models" in the computing world are more often called "abstractions". 
Every?most computer program(mes) are, by definition, an abstraction of 
some real-world event, calculation, or whatever. A Person() class might 
have the name of a real-person, but it is definitely not that (or any 
other) person. It is an abstraction (and likely only of 'part' of that 
person). That said, if the person changes his/her name by Deed Poll 
(legal process) to "Slinky Python", then it would be insulting to use 
the previous name(s)! (and if someone has divorced and re-married, 
never, never, NEVER use the names of the original him+her when referring 
to the 'new' him+her!!!)
(PC alert: traditional pairing described)

You will observe that the original post attempts to paint a picture of 
the model I expected. Since then, several folk have taken me up on the 
request for "good reasons ... why not", and thus, as you say, enabled 
the replacement (education) of my "wrong model", with "the real thing".

 From where do people acquire their models? The YouTube video briefly 
touched-on this. Most commonly: previous experience - thus math students 
write formulae as description, and can come to grief when Python code 
insists upon a sequence of instructions.

So, next time someone tells you to 'read the code' you will wonder why 
the built-in 'documentation' isn't up-to-snuff; and when someone says 
RTFM you'll also realise that you've invited the person to construct 
their own model - an error-prone process at best; and that is why, if 
one examines the rate of adoption for (open source) languages and 
libraries, the greatest influence is the presence/absence of quality 
tutorials - materials designed to encourage the building of congruent 
mental models!


In this discussion we've heard people comparing pathlib with previous 
facilities in os and sys. That's unfortunate because reading the PEP 
shows an intention to diverge.

At the same time, and again reviewing this discussion, you can observe 
two models: one more abstract ("Pure") and the other more oriented to 
reflecting the FS ("concrete"). The gap between is the importance one 
places on each of the two models. Favoring the abstract means seeing the 
Pure constructs as important and the concrete as lesser. The more 
practical view asking for a means to access the file system, sees the 
Pure model as a foundation.

>> Have we moved on to how we can improve the situation?
> 
> Absolutely.
> 
> Documenting the fact that calling rename on a Path object does
> not update that object, and at least an acknowledgement of the
> backwards compatibility issues, would be a good start.  Does the
> same sort of thing happen with Path.chmod as well?
> 
> Clarifying what a Path object represents is also in order.  Again,
> I note that the top of https://docs.python.org/3/library/pathlib.html
> talks about filesystem paths, but a lot of the method descriptions
> (e.g., rename) use the phrase "this file," as if Path objects
> represent (or are actually proxies for) actual files or an actual
> filesystem.

+1

I'm hoping that the snippet taken directly from 'the manual' (see 
earlier post) showing that if the .rename()'s argument is a Path rather 
than a str, the author's intentions (and his model) become easier to 
follow. (help() docs don't though)

That said, if pathlib is not really 'for' file system operations, or 
only handles some of such (and not other(s) that I would like), then 
I'll happily go back/go elsewhere; and the great thing is that we are 
free to make up our own minds and to do things differently from 
each-other, if we want. ie YMMV!


I've learned a lot from this discussion. Thanks!
-- 
Regards =dn



More information about the Python-list mailing list