Message137664
| Author |
benjamin.peterson |
| Recipients |
Arfrever, Trundle, barry, benjamin.peterson, eric.araujo, jcea, michael.foord, ncoghlan, r.david.murray, rhettinger, soren |
| Date |
2011年06月04日.22:18:55 |
| SpamBayes Score |
1.2462475e-11 |
| Marked as misclassified |
No |
| Message-id |
<BANLkTinrBZGK4s=G0irJPAnz80gVUtbUmQ@mail.gmail.com> |
| In-reply-to |
<BANLkTikGU6ygqC28hVnQ0VwL9XrDhH+zbQ@mail.gmail.com> |
| Content |
2011年6月4日 Soren Hansen <report@bugs.python.org>:
>
> Soren Hansen <soren@linux2go.dk> added the comment:
>
> 2011年6月4日 Benjamin Peterson <report@bugs.python.org>:
>> 2011年6月4日 Soren Hansen <report@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 :)
Ah, sorry I should have thought before writing that. :)
self.__class__.__dir__.__get__(self, self.__class__) should work,
though. |
|
History
|
|---|
| Date |
User |
Action |
Args |
| 2011年06月04日 22:18:56 | benjamin.peterson | set | recipients:
+ benjamin.peterson, barry, rhettinger, jcea, ncoghlan, eric.araujo, Arfrever, r.david.murray, michael.foord, Trundle, soren |
| 2011年06月04日 22:18:55 | benjamin.peterson | link | issue12248 messages |
| 2011年06月04日 22:18:55 | benjamin.peterson | create |
|