James Y Knight wrote: > On Aug 17, 2005, at 2:55 PM, Timothy Fitz wrote: > > >>On 8/16/05, Raymond Hettinger <[EMAIL PROTECTED]> wrote: >> >> >>>-0 The behavior of dir() already a bit magical. Python is much >>>simpler >>>to comprehend if we have direct relationships like dir() and vars() >>>corresponding as closely as possible to the object's dictionary. If >>>someone injects non-strings into an attribute dictionary, why should >>>dir() hide that fact? >>> >> >>Indeed, there seem to be two camps, those who want dir to reflect >>__dict__ >>and those who want dir to reflect attributes of an object. It seems to >>me that those who want dir to reflect __dict__ should just use >>__dict__ in the first place. >> >>However, in the case of dir handling non-strings, should dir handle >>non-valid identifiers as well, that is to say that while >>foo.__dict__[2] = ... is an obvious case what about foo.__dict__["1"] >>? >> >>Right now the documentation says that it returns "attributes", and I >>would not consider non-strings to be attributes, so either the >>documentation or the implementation should rectify this disagreement. >> > > > I initially was going to say no, there's no reason to restrict your > idea of "attributes" to be purely strings, because surely you could > use non-strings as attributes if you wished to. But Python proves me > wrong: > >>> class X: pass > >>> X.__dict__[1] = 5 > >>> dir(X) > [1, '__doc__', '__module__'] > >>> getattr(X, 1) > TypeError: getattr(): attribute name must be string > > If dir() is supposed to return the list of attributes, it does seem > logical that it should be possible to pass those names into getattr. > I think I'd actually call that a defect in getattr() that it doesn't > allow non-string attributes, not a defect in dir(). Ooh...even more > annoying, it doesn't even allow unicode attributes that use > characters outside the default encoding (ASCII).
Which is quite natural: Python doesn't allow any non-ASCII identifiers either :-) > But either way, there's absolutely no reason to worry about the > attribute string being a valid identifier. That's pretty much only a > concern for tab-completion in python shells. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Aug 18 2005) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: _______________________________________________ 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