[ ![Real Python](/static/real-python-logo.893c30edea53.svg) ](/)

  * [ Start Here ](/start-here/)
  * Learn Python 

[ Python Tutorials →  
In-depth articles and video courses
](/search?kind=article&kind=course&order=newest) [ Learning Paths →  
Guided study plans for accelerated learning  ](/learning-paths/) [ Quizzes →  
Check your learning progress  ](/quizzes/) [ Browse Topics →  
Focus on a specific area or skill level  ](/tutorials/all/) [ Community Chat →  
Learn with other Pythonistas  ](/community/) [ Office Hours →  
Live Q&A calls with Python experts  ](/office-hours/) [ Podcast →  
Hear what’s new in the world of Python  ](/podcasts/rpp/) [ Books →  
Round out your knowledge and learn offline  ](/products/books/) [ Unlock All
Content → ](/account/join/)

  * More 

[ Learner Stories ](/learner-stories/) [ Python Newsletter ](/newsletter/) [
Python Job Board ](https://www.pythonjobshq.com) [ Meet the Team ](/team/) [
Become a Tutorial Writer ](/write-for-us/) [ Become a Video Instructor
](/become-an-instructor/)

  * [ Search ](/search "Search")

[ ](/search "Search") /

  * [ Join ](/account/join/)
  * [ Sign‑In ](/account/login/?next=%2Fpython-descriptors%2F)

— FREE Email Series —

🐍 Python Tricks 💌

![Python Tricks Dictionary Merge](/static/pytrick-dict-merge.4201a0125a5e.png)

Get Python Tricks »

🔒 No spam. Unsubscribe any time.

[ Browse Topics ](/tutorials/all/) [ Guided Learning Paths ](/learning-paths/)  
[ Basics ](/search?level=basics) [ Intermediate ](/search?level=intermediate)
[ Advanced ](/search?level=advanced)

* * *

[ api ](/tutorials/api/) [ best-practices ](/tutorials/best-practices/) [
career ](/tutorials/career/) [ community ](/tutorials/community/) [ databases
](/tutorials/databases/) [ data-science ](/tutorials/data-science/) [ data-
structures ](/tutorials/data-structures/) [ data-viz ](/tutorials/data-viz/) [
devops ](/tutorials/devops/) [ django ](/tutorials/django/) [ docker
](/tutorials/docker/) [ editors ](/tutorials/editors/) [ flask
](/tutorials/flask/) [ front-end ](/tutorials/front-end/) [ gamedev
](/tutorials/gamedev/) [ gui ](/tutorials/gui/) [ machine-learning
](/tutorials/machine-learning/) [ numpy ](/tutorials/numpy/) [ projects
](/tutorials/projects/) [ python ](/tutorials/python/) [ testing
](/tutorials/testing/) [ tools ](/tutorials/tools/) [ web-dev
](/tutorials/web-dev/) [ web-scraping ](/tutorials/web-scraping/)

Table of Contents

  * What Are Python Descriptors? 
  * How Descriptors Work in Python’s Internals 
    * Python Descriptors in Properties 
    * Python Descriptors in Methods and Functions 
  * How Attributes Are Accessed With the Lookup Chain 
  * How to Use Python Descriptors Properly 
  * Why Use Python Descriptors? 
    * Lazy Properties 
    * D.R.Y. Code 
  * Conclusion 

Mark as Completed

[ ](/feedback/survey/article/python-descriptors/liked/?from=article-sidebar
"Liked it") [ ](/feedback/survey/article/python-
descriptors/disliked/?from=article-sidebar "Disliked it")

[ Share ](https://twitter.com/intent/tweet/?text=Check out this %23Python
tutorial: Python%20Descriptors%3A%20An%20Introduction by
@realpython&url=https%3A//realpython.com/python-descriptors/) [ Share
](https://facebook.com/sharer/sharer.php?u=https%3A//realpython.com/python-
descriptors/) [ Email ](mailto:?subject=Python article for you&body=Check out
this Python
tutorial:%0A%0APython%20Descriptors%3A%20An%20Introduction%0A%0Ahttps%3A//realpython.com/python-
descriptors/)

![Python Descriptors: An
Introduction](https://files.realpython.com/media/Python-
Descriptors_Watermarked_1.ec0d674f97e5.jpg)

#  Python Descriptors: An Introduction

by  Davide Mastromatteo  [ intermediate ](/tutorials/intermediate/) [ python
](/tutorials/python/)

Mark as Completed

[ Share ](https://twitter.com/intent/tweet/?text=Check out this %23Python
tutorial: Python%20Descriptors%3A%20An%20Introduction by
@realpython&url=https%3A//realpython.com/python-descriptors/) [ Share
](https://facebook.com/sharer/shar