
self refers to the specific instance of an object. If a class is Human, then self.name means each object created from that class has its own name. For example, human1.name = "John" and human2.name = "Matt" store different values. self can be named anything, but it’s the standard convention. A class is the blueprint, and an object is an instance created from it that holds its own data.
The idea behind using classes with `self` and methods instead of just having a bunch of freestanding functions is that it helps organize your code better Typically when you have some data about something, you have a lot of functions that you want to use to do stuff with it Classes serve to logically group that data and its related functions into a single entity. This also means you don't have to pass all that data as arguments to the function, it's implicitly accessible via self