07.01.2011, 17:14, "Jean-Michel Pichavant" <jeanmic...@sequans.com>:
> kost BebiX wrote:
>
>>  Sorry for top posting, didn't know about that) I'm quote new to posting to 
>> mailing lists.
>>
>>  Well, actually the code you showed doesn't work)
>>>>>  class A(object):
>>  ..     def __init__(self):
>>  ..         self.d = {}
>>  ..     def __getattr__(self, key):
>>  ..         try:
>>  ..             return self.d[key]
>>  ..         except KeyError:
>>  ..             raise AttributeError
>>>>>  from copy import deepcopy
>>>>>  a = A()
>>>>>  deepcopy(a)
>>  Exception RuntimeError: 'maximum recursion depth exceeded while calling a 
>> Python object' in <type 'exceptions.AttributeError'> ignored
>>  Exception RuntimeError: 'maximum recursion depth exceeded while calling a 
>> Python object' in <type 'exceptions.AttributeError'> ignored
>>  0: <__main__.A object at 0xda0250>
>
> It does work as I pasted it with python2.5.
> recursion problems often occur when overriding __getattr__ or
> __getattribute__ *AND* accessing self attributes using self.attr form
> inside the method.
>
> try to change
>
>     return self.d[key]
>
> into
>
>     return object.__getattribute__(self, 'd')[key]
>
> Just speculating though, I cannot test since I don't reproduce the problem.
>
> JM

Yeap, that works. So, is it a python 2.6 bug? Because documentation says that 
__getattr__ is called only after property was not found (and __getattr__ was 
actually invented in a way that you can use self inside it).

-- 
jabber: k...@ya.ru
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to