Class methods are used as Factory methods, they are usually good for alternative constructors. In order to be able to use a method as a class-method (Calling Date.method(...) one needs to mark the method with the @classmethod decorator)

Please note, as we can see in the last example, this does not stop you from calling the method on an "instance-object". In either case the first argument passed will be the "class-object".

examples/classes/mydate2/mydate.py
from __future__ import print_function

class Date(object):
    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

    @classmethod
    def from_str(class_object, date_str):
        '''Call as
           d = Date.from_str('2013-12-30')
        '''
        print(class_object)
        year, month, day = map(int, date_str.split('-'))
        return class_object(year, month, day)

examples/classes/mydate2/run.py
from __future__ import print_function
from mydate import Date

d = Date(2013, 11, 22)
print(d)

d.set_date(2014, 1, 27)
print(d)

print('')
dd = Date.from_str('2013-10-20')
print(dd)

print('')
z = d.from_str('2012-10-20')
print(d)
print(z)
examples/classes/mydate2/run.out
Date(2013, 11, 22)
Date(2014, 1, 27)

<class 'mydate.Date'>
Date(2013, 10, 20)

<class 'mydate.Date'>
Date(2014, 1, 27)
Date(2012, 10, 20)