Как насчет объектно-ориентированного подхода для начала?Вот базовый класс, который может быть подвержен ошибкам в зависимости от использования, но достаточно для начала.Хотя 1h
является недопустимым синтаксисом, если вы можете принять 1*h
, это должно сделать:
class mytime:
def __init__(self,type):
self.type=type
self.amount=1
self.state=1
def __mul__(self,x):
self.amount = x
__rmul__ = __mul__
def __neg__(self):
self.state = -1
def __pos__(self):
self.state = 1
В функции умножения может быть полезно убедиться, что аргумент действительно является числом.Теперь вы можете использовать:
h = mytime('h')
time_offset(-h) //Or -2*h, or +h, or 3*h etc...
Теперь вам нужно изменить time_offset
для обработки с такими вещами, как:
Я создал функцию, как показано ниже, которая будет рассчитывать время для пользователя в зависимости отна том, что предоставил пользователь, т. е. если пользователь предоставит (1, 'h', '+'), функция обеспечит добавление часа к текущему времени, если пользователь ничего не предоставит, параметры по умолчанию гарантируют, что пользовательпредоставляется с текущим временем.Однако я хотел бы, чтобы функция принимала (-1h), чтобы пользователю не приходилось вводить кавычки, и функция все равно будет работать.
Ниже приведена функция, которую я хотел бы изменить, как мы можем видетьон принимает текущий формат, но я хочу изменить формат.
импорт datetime время импорта
def time_offset(thetime):
value = thetime.type
time = thetime.amount
ch = self.state //I use integers since now you can just pass ch*time instead of checking for '-' or '+'
Другой вариант , чтобы сделать h
больше одногоиспользуйте вещь, вместо того, чтобы сохранять данные, используя умножение, чтобы просто вернуть данные.Класс становится следующим:
class mytime:
def __init__(self,type):
self.type=type
def __mul__(self,x):
return (x,self.type) #x contains the negative sign if needed
__rmul__ = __mul__
def __neg__(self):
return (-1,self.type)
def __pos__(self):
return (1,self.type)
В этом методе вы не можете просто иметь h
сам по себе, поскольку time_offset(h)
будет вести себя по-другому - или вы можете убедиться, что у него правильное поведение кортежа, __getitem__
определенонапример:
def __getitem__(self,i):
return (1,self.type)[i]