This post will examine Python object oriented programming.
When you think of Python object oriented programming, you should think of it as an orchestration of objects using the capabilities that each object has.
A function is a bit of code, but an object is a bit of code and data.
Part of the goal in object oriented programming is to take a complex problem and break it into smaller parts. Then you can hide complexity in the smaller parts, which allows you to work on other parts without having to worry about the complexity. Essentially, you want a simple interface, that hides complexity.
In the end, your program begins a network of objects that you orchestrate to get the desired output.