[Python-Dev] Meta-reflections (original) (raw)
john coppola john_coppola_r_s@yahoo.com
Mon, 18 Feb 2002 12:01:17 -0800 (PST)
- Previous message: [Python-Dev] Meta-reflections
- Next message: [Python-Dev] Meta-reflections
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
[ David Ascher <DavidA@ActiveState.com> wrote:]
I think that you're making useful points, but I think that it's worth stepping even further back and deciding what the reflection API should be like from a "what's it for" POV?
This relates to much of the discussion about what dir() should do on new-style classes, as well as why some Python objects have 'members', some have 'methods', etc.
I think his points were more than useful. His examples expose serious flaws with the use of slots, which I hardly see as satisfactory behavior. Particularly, are slot attributes to be treated like MRO or not? Hummm...
Does each class have a separate set of slot attributes?
class A: slots=('foo','bar')
class B(A): slots=('foo','spam')
What are we supposed to expect here?
I believe things would be greatly simplified if the inheritance tree was traversed and all slot attributes were concatenated and regarded as unique for a given instance. So in the above example we would expect (breadth first then depth), slots =('foo', 'spam', 'bar').
A note on dir... Since we have no other introspection tools aside from dir, I as of this revision of python dir should correctly display slot attributes with dict attributes.
Does "dir" stand for directory or does it mean dict.keys()? I believe this is an implementation detail. Dir should lookup every attribute, but now we need two additional functions: slotdir(), dictdir(). Maybe better names: slots(), dictdir(). Another argument for why dir should be changed, is that cPickle and pickle would problably function correctly as a result of changing dir's implementation to reveal slot attributes.
But even on another note which digs deeper into the philosophy of slots, why not use slots for class methods? Can this already be done? It can be used everywhere, modules, imported modules, classes, instances, etc.
In my opinion, dict is mostly an implementation detail, and it makes sense to me that the slot names dont' show up in there (after all, it's not a dictionary!). What I'd propose is that the inspect module grow some "abstract" reflection APIs which make it possible for folks who don't need to know about implementation details to get away with it. Looking at it, maybe it already has everything we need. I'm not quite sure why inspect.getmembers is called that, but maybe I'm the only one who's not sure what 'members' mean in Python. --david
Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev
Do You Yahoo!? Yahoo! Sports - Coverage of the 2002 Olympic Games http://sports.yahoo.com
- Previous message: [Python-Dev] Meta-reflections
- Next message: [Python-Dev] Meta-reflections
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]