Denis Osipov <osipo...@list.ru> added the comment:
Got it. But now docs says that overriding the __getattr__() method is enough to customize attribute access. It's not completely true. If I understand it correct, to make __getattr__() work every time you need to call it by __getattribute__ or raise AttributeError, e.g. store attributes somewhere not in instance __dict__. In this case you need to override __setattr__ too. class MyGetattrClass: def __init__(self): super().__setattr__("attrs", {}) def __setattr__(self, name, value): self.attrs[name] = value def __getattr__(self, name): try: print(f"{name} equals {self.attrs[name]}") except KeyError: raise AttributeError( f"{type(self).__name__!r} object has no attribute {name!r}" ) from None If it's correct, we probably should add some clarification in expressions doc. Or maybe just link to https://docs.python.org/3/reference/datamodel.html#object.__getattr__ (which mention about it) will be enough. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue35165> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com