What is __init__?
It is an initialiser, not a constructor.
It takes self as an argument (so it exists already) and populates it.
What is @classmethod used for?
Alternative constructor
What is @staticmethod used for?
Attaching functions to classes - not a part of class but a utility
What is purpose of using double underscore before variable name?
Distinguish class and subclass variable _class\_\_var