Instance methods

Regular functions (methods) defined in a class are "instance methods". They can only be called on "instance objects" and not on the "class object" as see in the 3rd example.
The attributes created with "self.something = value" belong to the individual instance object.

class Date:
    def __init__(self, Year, Month, Day):
        self.year  = Year
        self.month = Month   = Day

    def __str__(self):
        return 'Date({}, {}, {})'.format(self.year, self.month,

    def set_date(self, y, m, d):
        self.year = y
        self.month = m = d

from mydate import Date

d = Date(2013, 11, 22)

# We can call it on the instance
d.set_date(2014, 1, 27)

# If we call it on the class, we need to pass an instance.
# Not what you would normally do.
Date.set_date(d, 2000, 2, 1)

# If we call it on the class, we get an error
Date.set_date(1999, 2, 1)

set_date is an instance method. We cannot properly call it on a class.

Date(2013, 11, 22)
Date(2014, 1, 27)
Date(2000, 2, 1)
Traceback (most recent call last):
  File "", line 17, in <module>
    Date.set_date(1999, 2, 1)
TypeError: set_date() missing 1 required positional argument: 'd'