Python attribute lookup order: why a data descriptor beats the instance __dict__, and when __set_name__ runs
obj.x checks data descriptors before the instance __dict__. How __set__ or __delete__ sets the order, why cached_property can be overwritten, and why late-added descriptors miss __set_name__.
Pythondescriptorattribute-lookupset-name