During the first and second week of the winter term, I was struggling heavily on thinking like an OOP programmar with the given resources. At last, I decided to look on the web for explanations and it turns out to be tremendously helpful. On top of that, I realized that when it comes to theories of computer science, it doesn't matter what kind of language I am analysing because all OOP programming languages work more or less the same way! Most importantly, I find that the use of examples really guide my way through breaking down the idea of classes.
One of the most direct explanations I preferred was the idea of a class as a bank account. Bank account itself is nothing but a general term. In order to make it useful, someone must make use of the class and creates actual bank account (objects) that can store important and realistic information. I find it helpful to do various examples because the more I do them, the more I can visualize what is going on behind the curtains.
In week 3, we focused primarily on inheritance and it was something new to me. The concept of being able to pass on instructions to a subclass is just ridiculously amazing! Not only will programmers save themselves from redundancies, but it creates the re-usability which I found out is the main idea behind libraries of many programming languages. For instance, we can still use __init__ method even if we haven't explicitly coded in the class because it will automatically inherit from the object class, which is the biggest class in Python. As for catching and raising exceptions, I have done it before back in high school so it was a breeze. However, I never knew we could make a more specific and more self-explanatory exception class from the derivation of the most general Exception class.