Other Properties, Attributes, and Methods

Learn about container objects, dynamic attributes for objects, and callable objects in Python.

Container objects

Containers are objects that implement a __contains__ method (which usually returns a Boolean value). This method is called in the presence of the in keyword in Python and looks something like this:

element in container

When used in Python, it becomes this:

container.__contains__(element)

We can imagine how much more readable (and Pythonic!) the code can be when this method is properly implemented.

Let's say we have to mark some points on a map of a game that has two-dimensional coordinates. We might expect to find a function like the following:

Press + to interact
def mark_coordinate(grid, coord):
if 0 <= coord.x < grid.width and 0 <= coord.y < grid.height:
grid[coord] = MARKED

Now, the part that checks the condition of the first if statement seems convoluted; it doesn't reveal the intention of the code, it's not expressive, and worst of all it calls for code duplication (every part of the code where we need to check the boundaries before proceeding will have to repeat that if statement).

What if the map itself (called grid on the code) could answer this question? Even better, what if the map could delegate this action to an even smaller (and hence more cohesive) object?

We could solve this problem in a more elegant way with object-oriented design and with the help of a magic method. In this case, we can create a new abstraction to ...

Get hands-on with 1400+ tech skills courses.