Look over this code sample, it should be very explanatory:
# role of self in Python classes
# self can be named different, but 'self' is convention
class Snake:
def __init__(self, name):
# self keeps track of each instance
# and also makes self.name global to class methods
self.name = name
# test
print(self)
def isnice(self):
# a class method has self as the first argument
return self.name + " is very nice"
# create 2 instances of class Snake
bob = Snake('Bob Python')
mary = Snake('Mary Rattle')
print('-'*40)
# now you can get the name that has been assigned to self.name
print(bob.name)
print(mary.name)
# access the class method
print(mary.isnice())
"""my result -->
# self for each instance has a different location in memory
<__main__.Snake object at 0x01E0B2B0>
<__main__.Snake object at 0x01E0B090>
----------------------------------------
Bob Python
Mary Rattle
Mary Rattle is very nice
"""