New-style classes and special methods

Carl Banks imbosol-1046070601 at aerojockey.com
Mon Feb 24 02:13:44 EST 2003


Jp Calderone wrote:
> [-- text/plain, encoding quoted-printable, 37 lines --]
> 
>  Consider this class:
> 
>    class Foo:
>        def __getattr__(self, name):
>            return lambda arg: arg
> 
>  It can be used thusly:
> 
>    f = Foo()
>    print f[10]

Sure?


>  Producing the output "10".  Now consider this class:
> 
>    class NewFoo(object):
>        def __getattr__(self, name):
>            return lambda arg: arg
> 
>  When used in the same way, this exception is raised:
> 
>    TypeError: unindexable object

It might have worked if you had used __getitem__ instead of
__getattr__.  At least it did for me.


>  From a quick glance at the source, it seems that neither tp_as_mapping nor
> tp_as_sequence are being initialized, presumably because __getitem__ isn't
> seen as being defined.

Correct.


>  Is this analysis of the behavior correct?  If so, what are the chances of
> this being "fixed"?
> 
>  Jp
> 

-- 
CARL BANKS




More information about the Python-list mailing list