Open Hnasar opened 1 month ago
I think this is related to #1288? As we've established there, it seems to be a rather complicated issue and all solutions either led the concept of caching ad absurdum (read: performance impact made it questionable to be worth it) or just added another edge case. :|
With attrs 24.2.0 and 23.2.0, if you use
cached_property
and try to override it in a child, and access the parent value, you get anAttributeError
. We ran into this in our code when converting some classes to use slots.I see there was support added in 24.2.0 for
But attrs still doesn't support _"super() calls of overridden cachedproperty's in slotted classes":
Workarounds:
Elaboration:
I see the special handling is described in the docs and I see in the code that it generates a special
__getattr__
that sets the generated value in the slot after being called. Perhaps when constructing a class, attrs should also walk the MRO forcached_property
s and handle any overriddencached_property
methods — perhaps create some sort of namespaced/name-manged properties for the parent.