ich habe folgende Klasse gebastelt:
Code: Alles auswählen
class DatetimeArgs(object):
'''This class is used to store datetime arguments.
If a asked argument not exist or its boolean value is False
the default value which is the equivalent value of the
current datetime will be returned.
Each argument can only set once otherwise a ValueError occurs.'''
DATETIME_ARG_NAMES = ('year', 'month', 'day', 'hour', 'minute')
DELTA_ARG_NAMES = ('years', 'months', 'days', 'hours', 'minutes')
def __init__(self):
self._defaults = dict(zip((self.DATETIME_ARG_NAMES),
datetime.datetime.now().timetuple()[0:5]) +
zip(self.DELTA_ARG_NAMES,
(0, 0, 0, 0, 0)))
def __setattr__(self, name, value):
if not name in self.__dict__:
self.__dict__[name] = value
else:
raise ValueError(ERR_REPEATED_DATETIME_ARG.format(name))
def __getattr__(self, name):
print '__getattr__ called'
value = self.__dict__.get(name, self._defaults[name])
return value or self._defaults[name]
def get_dict(self, type_):
type_ = (self.DELTA_ARG_NAMES if type_ == 'deltas' else
self.DATETIME_ARG_NAMES)
return dict((name, getattr(self, name)) for name in type_)Code: Alles auswählen
>>> results = DatetimeArgs()
>>> results.day
__getattr__ called
14
>>> results.day = 15
>>> results.day
15