1) methods are just functions that happen defined in a class, and need to be callable either as bound methods with implicit self passing or as plain functions with explicit self passing 2) making classmethod s and staticmethod s means you want to be able to rename and omit self respectively. To close debugging questions where op omitted a self parameter for a method and got a typeerror, use typeerror Method () takes 1 positional argument but 2 were given instead In the body of the method and got a nameerror, consider how can. So, in the first method self specifies that python should use the variable (attribute), that belongs to the class object we created, not a global one (outside the class).
Technically both self and this are used for the same thing They are used to access the variable associated with the current instance Only difference is, you have to include self explicitly as first parameter to an instance method in python, whereas this is not the case with java Moreover, the name self can be anything. The self keyword in python is analogous to this keyword in c++ / java / c# In python 2 it is done implicitly by the compiler (yes python does compilation internally).
When you create a new bank, and call create_atm on it, self will be implicitly passed by python, and will refer to the bank you created. Why is cls sometimes used instead of self as an argument in python classes In python, every normal method is forced to accept a parameter commonly named self This is how python methods interact with a class's state You are allowed to rename this parameter whatever you please But it will always have the same value:
The w3c's webappsec working group is starting to look at the issue
OPEN