Phillip J. Eby wrote: > At 07:02 PM 1/14/05 -0500, Glyph Lefkowitz wrote: > >For the sake of argument, let's say that SegmentPen is a C type, > >which does not have a __dict__, and that PointPen is a Python > >adapter for it, in a different project. > > There are multiple implementation alternatives possible here; it > isn't necessary that the state be hidden there. The point is that, > given the same SegmentPen, we want to get the same PointPen each time > we *implicitly* adapt, in order to avoid violating the "naive" > developer's mental model of what adaptation is -- i.e. an extension > of the object's state, not a new object with independent state. > > One possible alternative implementation is to use a dictionary from > object id to a 'weakref(ob),state' tuple, with the weakref set up to > remove the entry when 'ob' goes away. Adapters would then have a > pointer to their state object and a pointer to the adaptee. As long > as an adapter lives, the adaptee lives, so the state remains valid. > Or, if no adapters remain, but the adaptee still lives, then so does > the state which can be resurrected when a new adapter is requested. > It's too bad Python doesn't have some sort of deallocation hook you > could use to get notified when an object goes away. Oh well.
That sounds extremely complicated as apposed to just storing the sate where it most logically belongs: on the adapter. And all that to work around a problem that I'm not convinced needs solving or even exists. At the very least *I* don't care about it in my use case. > Anyway, as you and I have both pointed out, sticky adaptation is an > important use case; when you need it, you really need it. Maybe I missed it, but was there an example posted of when "sticky adaptation" is needed? It's not at all clear to me that "sticky" behavior is the best default behavior, even with implicit adoptation. Would anyone in their right mind expect the following to return [0, 1, 2, 3, 4, 5] instead of [0, 1, 2, 0, 1, 2]? >>> from itertools import * >>> seq = range(10) >>> list(chain(islice(seq, 3), islice(seq, 3))) [0, 1, 2, 0, 1, 2] >>> Just _______________________________________________ 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