O'Reilly logo

Fluent Python by Luciano Ramalho

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Chapter 9. A Pythonic Object

Never, ever use two leading underscores. This is annoyingly private.[49]

Ian Bicking Creator of pip, virtualenv, Paste and many other projects

Thanks to the Python data model, your user-defined types can behave as naturally as the built-in types. And this can be accomplished without inheritance, in the spirit of duck typing: you just implement the methods needed for your objects to behave as expected.

In previous chapters, we presented the structure and behavior of many built-in objects. We will now build user-defined classes that behave as real Python objects.

This chapter starts where Chapter 1 ended, by showing how to implement several special methods that are commonly seen in Python objects of many different types.

In this chapter, we will see how to:

  • Support the built-in functions that produce alternative object representations (e.g., repr(), bytes(), etc).
  • Implement an alternative constructor as a class method.
  • Extend the format mini-language used by the format() built-in and the str.format() method.
  • Provide read-only access to attributes.
  • Make an object hashable for use in sets and as dict keys.
  • Save memory with the use of __slots__.

We’ll do all that as we develop a simple two-dimensional Euclidean vector type.

The evolution of the example will be paused to discuss two conceptual topics:

  • How and when to use the @classmethod and @staticmethod decorators.
  • Private and protected attributes in Python: usage, conventions, and limitations.

Let’s ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required