[IronPython] __getattribute__ bug

Michael Foord fuzzyman at voidspace.org.uk
Sat Nov 3 01:26:48 CET 2007

Hello all,

A bug in '__getattribute__' - magic methods should be fetched from the 
class and not go through '__getattribute__'.

This is making a proxy class I'm writing behave very oddly:

The following code:

def DoNothing(*args):

class Something(object):
    def __getattribute__(self, name):
        print name
        return DoNothing
    def __call__(self):
        print 'called'
    def __getitem__(self, name):
        raise Exception('w00t!')

    def __setitem__(self, name, value):
        raise Exception('w00t!')
s = Something()
s['fish'] = 3

Does this on CPython:

Traceback (most recent call last):
  File "C:\compile\cext\trunk\cext\descriptors.py", line 20, in ?
    s['fish'] = 3
  File "C:\compile\cext\trunk\cext\descriptors.py", line 17, in __setitem__
    raise Exception('w00t!')
Exception: w00t!

And this on IronPython 2a5:

C:\compile\cext\trunk\cext>C:\compile\IronPython2\ipy.exe -D 
-X:TabCompletion -X
:ColorfulConsole descriptors.py

To make things odder - if the class 'Something' doesn't have a 
__setitem__ method then an attribute error is correctly raised. For 
'__call__' I am *sometimes* seeing that go through '__getattribute__' 
and sometimes not...


More information about the Ironpython-users mailing list