In this chapter, we discussed modern Python syntax elements related to class models and object-oriented programming.
We started with an explanation of the language protocol concept and simple ways to implement those protocols. We discussed the subclassing of built-in types and how to call methods from superclasses. After that, we moved on to more advanced concepts of object-oriented programming in Python. These were useful syntax features that focus on instance attribute access: descriptors and properties. We demonstrated how they can be used to create cleaner and more maintainable code.
In the next chapter, we will explore the vast topic of metaprogramming in Python. We will reuse some of the syntax features that we've learned so far to show various metaprogramming techniques.