Denis Osipov <[email protected]> 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 <[email protected]>
<https://bugs.python.org/issue35165>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com