This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author denis-osipov
Recipients denis-osipov, docs@python
Date 2018-10-31.04:26:13
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1540959974.35.0.788709270274.issue35119@psf.upfronthosting.co.za>
In-reply-to
Content
Customizing module attribute access example raises RecursionError:

>>> import sys
>>> from types import ModuleType
>>> class VerboseModule(ModuleType):
...     def __repr__(self):
...         return f'Verbose {self.__name__}'
...     def __setattr__(self, attr, value):
...         print(f'Setting {attr}...')
...         setattr(self, attr, value)
...
>>> sys.modules[__name__].__class__ = VerboseModule
>>> sys.modules[__name__].a = 5
Setting a...
<...>
Setting a...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in __setattr__
  File "<stdin>", line 6, in __setattr__
  File "<stdin>", line 6, in __setattr__
  [Previous line repeated 495 more times]
  File "<stdin>", line 5, in __setattr__
RecursionError: maximum recursion depth exceeded while calling a Python object
Setting a...>>>

Something like this can fix it:

def __setattr__(self, attr, value):
...         print(f'Setting {attr}...')
...         super().setattr(self, attr, value)
History
Date User Action Args
2018-10-31 04:26:14denis-osipovsetrecipients: + denis-osipov, docs@python
2018-10-31 04:26:14denis-osipovsetmessageid: <1540959974.35.0.788709270274.issue35119@psf.upfronthosting.co.za>
2018-10-31 04:26:14denis-osipovlinkissue35119 messages
2018-10-31 04:26:13denis-osipovcreate