[Python-Dev] SWIG and rlcompleter

M.-A. Lemburg mal at egenix.com
Thu Aug 18 09:36:14 CEST 2005


James Y Knight wrote:
> On Aug 17, 2005, at 2:55 PM, Timothy Fitz wrote:
> 
> 
>>On 8/16/05, Raymond Hettinger <raymond.hettinger at verizon.net> 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 ! ::::


More information about the Python-Dev mailing list