Phillip J. Eby wrote:
At 04:07 PM 1/12/05 -0600, Ian Bicking wrote:

It also seems quite reasonable and unambiguous that a path object could be adapted to a IReadableFile by opening the file at the given path.


Not if you think of adaptation as an "as-a" relationship, like using a screwdriver "as a" hammer (really an IPounderOfNails, or some such). It makes no sense to use a path "as a" readable file, so this particular adaptation is bogus.

I started to realize that in a now-aborted reply to Steven, when my defense of the path->IReadableFile adaptation started making less sense. It's *still* not intuitively incorrect to me, but there's a couple things I can think of...


(a) After you adapted the path to the file, and have a side-effect of opening a file, it's unclear who is responsible for closing it.
(b) The file object clearly has state the path object doesn't have, like a file position.
(c) You can't go adapting the path object to a file whenever you wanted, because of those side effects.


So those are some more practical reasons that it *now* seems bad to me, but that wasn't my immediate intuition, and I could have happily written out all the necessary code without countering that intuition. In fact, I've misused adaptation before (I think) though in different ways, and it those mistakes haven't particularly improved my intuition on the matter. If you can't learn from mistakes, how can you learn?

One way is with principles and rules, even if they are flawed or incomplete. Perhaps avoiding adaptation diamonds is one such rule; it may not be necessarily and absolutely a bad thing that there is a diamond, but it is often enough a sign of problems elsewhere that it may be best to internalize that belief anyway. Avoiding diamonds alone isn't enough of a rule, but maybe it's a start.

--
Ian Bicking  /  [EMAIL PROTECTED]  / http://blog.ianbicking.org
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to