Q70: What are Data Descriptors vs Non-Data Descriptors and their lookup precedence?

  • Data Descriptor: Implements __get__() AND __set__() (or __delete__()). Has higher priority than instance __dict__.
  • Non-Data Descriptor: Implements __get__() only (e.g. methods). Has lower priority than instance __dict__. Lookup Order: Data Descriptor -> Instance __dict__ -> Non-Data Descriptor -> Class __dict__.
Key Takeaways
  • Data descriptors override instance __dict__ attributes.
  • Non-data descriptors yield priority to instance __dict__ attributes.
Knowledge Check

Which attribute location takes precedence over a Data Descriptor during attribute lookup?