39
39
# Note that as of Python 2.3, a datetime module is included in the stardard
40
40
# library.
41
41
42
- # vi:set tabsize=8:
42
+ import functools
43
43
44
44
_MONTH_NAMES = [ 'January' , 'February' , 'March' , 'April' , 'May' ,
45
45
'June' , 'July' , 'August' , 'September' , 'October' ,
57
57
dbm = dbm + dim
58
58
del dbm , dim
59
59
60
- _INT_TYPES = type (1 ), type (1 )
61
-
62
60
def _is_leap (year ): # 1 if leap year, else 0
63
61
if year % 4 != 0 : return 0
64
62
if year % 400 == 0 : return 1
@@ -85,7 +83,7 @@ def _date2num(date): # compute ordinal of date.month,day,year
85
83
_DI400Y = _days_before_year (400 ) # number of days in 400 years
86
84
87
85
def _num2date (n ): # return date with ordinal n
88
- if type ( n ) not in _INT_TYPES :
86
+ if not isinstance ( n , int ) :
89
87
raise TypeError ('argument must be integer: %r' % type (n ))
90
88
91
89
ans = Date (1 ,1 ,1 ) # arguments irrelevant; just getting a Date obj
@@ -116,7 +114,7 @@ def _num2date(n): # return date with ordinal n
116
114
def _num2day (n ): # return weekday name of day with ordinal n
117
115
return _DAY_NAMES [ int (n % 7 ) ]
118
116
119
-
117
+ @ functools . total_ordering
120
118
class Date :
121
119
def __init__ (self , month , day , year ):
122
120
if not 1 <= month <= 12 :
@@ -133,8 +131,11 @@ def __setattr__(self, name, value):
133
131
raise AttributeError ('read-only attribute ' + name )
134
132
self .__dict__ [name ] = value
135
133
136
- def __cmp__ (self , other ):
137
- return cmp (self .ord , other .ord )
134
+ def __eq__ (self , other ):
135
+ return self .ord == other .ord
136
+
137
+ def __lt__ (self , other ):
138
+ return self .ord < other .ord
138
139
139
140
# define a hash function so dates can be used as dictionary keys
140
141
def __hash__ (self ):
@@ -150,14 +151,14 @@ def __repr__(self):
150
151
151
152
# Python 1.1 coerces neither int+date nor date+int
152
153
def __add__ (self , n ):
153
- if type ( n ) not in _INT_TYPES :
154
+ if not isinstance ( n , int ) :
154
155
raise TypeError ('can\' t add %r to date' % type (n ))
155
156
return _num2date (self .ord + n )
156
157
__radd__ = __add__ # handle int+date
157
158
158
159
# Python 1.1 coerces neither date-int nor date-date
159
160
def __sub__ (self , other ):
160
- if type (other ) in _INT_TYPES : # date-int
161
+ if isinstance (other , int ) : # date-int
161
162
return _num2date (self .ord - other )
162
163
else :
163
164
return self .ord - other .ord # date-date
0 commit comments