Soren Hansen <so...@linux2go.dk> added the comment:

2011/6/4 Benjamin Peterson <rep...@bugs.python.org>:
> 2011/6/4 Soren Hansen <rep...@bugs.python.org>:
>> So my question is: If this change stays (which seems clear given that the 
>> only changes proposed here are ways of relaxing the type requirement of the 
>> __dir__ method's return value, not reverting the change altogether), and I 
>> have an old-style class with a __getattr__ defined, how do I make that class 
>> return whatever it would have usually returned for __dir__()?
>
> Yes, this is a limitation of magic methods on old style classes. The
> usual method is something like this:
>
>    def __getattr__(self, name):
>        if name == "__dir__":
>            return self.__dir__
>        # Other stuff
>
> Of course, the best fix is to use new-style classes. :)

If I do this:

===== test.py ======
class Foo:
    def __getattr__(self, name):
        if name == '__dir__':
            return self.__dir__
        return 'something else'

a = Foo()
print dir(a)
====================

After a lot of this:
  File "test.py", line 4, in __getattr__
    return self.__dir__
  File "test.py", line 4, in __getattr__
    return self.__dir__
  File "test.py", line 4, in __getattr__
    return self.__dir__

...I end up with a "RuntimeError: maximum recursion depth exceeded". I
can't say I'm surprised :)

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue12248>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to