Understanding Python self.

This answer from StackOverflow helped me understand this concept a bit better.

The Simpsons, Self and Python

If you have a class called list with a method called append.

>>> simpsons = list()
>>> simpsons.append('homer')
>>> simpsons
['homer']

The method is defined as this:

def append(self, arg1, arg2):
    # do something

The simpsons object is an instance of the class list.

As the solution says, but using my example:

When simpsons.append('homer') is called, Python internally converts this to:

list.append(simpsons, 'homer')

If I run this again with another argument:

>>> list.append(simpsons, 'bart')
>>> simpsons
['homer', 'bart']

Which means that these 2 do the same:

>>> simpsons.append('bart')
>>> list.append(simpsons, 'bart')

Looking at this again:

def append(self, arg1)

The self variable refers to the object.

Rock bands, Self and Python

This is another good answer about self and Python in Quora.

The first few paragraphs create a good context for understanding self.

  • A class has methods
  • A class can have multiple objects

Here is an interesting question.

“When an object calls a method of the class, how would the method know which object has called it?”

class myBand:
    def __init__(self):
        self.instruments = []
        self.instruments.append('drums')

    def append(self):
        awesome append code

muse = myBand()
muse.append('bass')  # prints ['drums', 'bass']

radiohead = myBand()
radiohead.append('moog') # prints ['drums', 'moog']

Following the same example as the Simpsons

>>> muse.append('bass')
>>> myBand.append(muse, 'bass')
>>> myBand.append(self, arg1)