I'm just starting out with Python and I really want to get a handle on Object-Oriented Programming (OOP), but I keep finding myself coding in a procedural style, even when I'm using classes. I'm looking for some resources or advice on how to effectively learn OOP design as a beginner. Most of the tutorials I've seen focus more on syntax rather than on applying the concepts. Any suggestions?
5 Answers
OOP starts to make sense when you shift your mindset from just fitting everything into classes to really thinking about the things you are trying to model. Once you understand the objects and their roles, the structure tends to follow naturally. We often overthink the syntax; it’s the philosophy and application that need practice.
Making games might be the best way to learn OOP. If you're a Python fan, try using PyGame. When you're developing a game, OOP makes a lot of sense because you'll end up needing many instances of different objects, like characters, which interact in various ways. It's a practical way to see OOP principles in action!
I found that OOP really clicked for me when I learned it through Java instead of Python. Sometimes the differences in the languages can help clarify the concepts.
Here's what helped me get a better grasp of OOP:
1. First, just get your application running. Don't stress about the structure, just make it work.
2. Look for duplicated code and pull it into reusable methods.
3. Aim for single responsibility. Each method should do one main thing. If they're doing more, break them down.
4. After organizing your methods, think about grouping them and their associated variables into a class. Consider how they can represent a real-world entity. But remember, as a beginner, focus on making things work before overcomplicating with OOP.
What part of OOP are you finding tricky? For me, it was the idea of "instantiating" classes. I used to create static instances and try to share everything among them. Once I got it in my head that a class is like a "cookie cutter" for creating objects, it started to make sense. For example, instead of manually managing coordinates for each ghost in a game, I could define a ghost class and create multiple instances for each ghost with their own methods, making things way simpler. Have you found any good beginner tutorials outside of YouTube? What did you think of them?

It's interesting, though, because some experienced developers will tell you that focusing on composition and interfaces can often be more beneficial than strictly adhering to OOP.