As a very brief review, self refers to a current instance of the class while cls variables are attached to the class itelf i.e., shared among every instance. Here are some references to help with this, and how I got to your solution:
I modified your sample code to illustrate the difference and included a solution:
class MyClass:
__var2 = 'var2'
var3 = 'var3'
def __init__(self):
self.__var1 = 'var1'
def normal_method(self):
print self.__var1
@classmethod
def class_method(cls):
print cls.__var2
def my_method(self):
print self.__var1
print self.__var2
print self.__class__.__var2
if __name__ == '__main__':
print MyClass.__dict__['var3']
clzz = MyClass()
clzz.my_method()
__var2 and var3 are variables saved to the class. You can access any class variable without an instance via __dict__ which represents the name space.
Since class variables become a part of every instance, you can just call self to access them. Alternatively, you can explicitly call self.__class__.__var2 to make it clear where the intended variable is actually stored.