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
self.day = Day
def __str__(self):
return 'Date({}, {}, {})'.format(self.year, self.month, self.day)
def set_date(self, y, m, d):
self.year = y
self.month = m
self.day = d
from mydate import Date
d = Date(2013, 11, 22)
print(d)
# We can call it on the instance
d.set_date(2014, 1, 27)
print(d)
# 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)
print(d)
# 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 "run.py", line 17, in <module>
Date.set_date(1999, 2, 1)
TypeError: set_date() missing 1 required positional argument: 'd'