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