Static methods are used when no "class-object" and no "instance-object" is required. They are called on the class-object, but they don't receive it as a parameter.

They might be better off placed in a module, like the other_method.

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

def other_method(val):
    print(val)

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)

    @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('-'))

        other_method(43)

        if class_object.is_valid_date(year, month, day):
            return class_object(year, month, day)
        else:
            raise Exception("Invalid date")

    @staticmethod
    def is_valid_date(year, month, day):
        if 0 <= year <= 3000 and  1 <= month <= 12 and 1 <= day <= 31:
            return True
        else:
            return False

examples/classes/mydate4/run.py
from __future__ import print_function
import mydate

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

print('')
print(mydate.Date.is_valid_date(2013, 10, 20))
print(mydate.Date.is_valid_date(2013, 10, 32))
print('')

x = mydate.Date.from_str('2013-10-32')

examples/classes/mydate4/run.out
<class 'mydate.Date'>
Date(2013, 10, 20)

True
False

<class 'mydate.Date'>
Traceback (most recent call last):
  File "run.py", line 12, in <module>
    x = mydate.Date.from_str('2013-10-32')
  File ".../python/examples/classes/mydate4/mydate.py", line 22, in from_str
    raise Exception("Invalid date")
Exception: Invalid date