Привет всем, у меня есть класс, который работает со временем, например, вы вводите два раза, и можете их суммировать (на данный момент не имеет значения, что это выходит за пределы 23:59:59) или умножить их и т. д. Значением по умолчанию являются нули. Существует также функция, которая возвращает текущее время. Я могу позвонить time = Time()
, который возвращает 0:00:00
, time = Time(12)
возвращает 12:00:00
.Принять одну строку вместо обычных параметров
Проблема, что у меня есть, я хочу назвать time = Time('now')
и он должен хранить там текущее время с помощью функции now()
, редактирование должно быть сделано в __init__()
(если вам не нравится now()
вы можете изменить его). Но если я положил time_now = ''
в качестве первого параметра, это не сработает, то же самое, когда я ставлю его последним, потому что когда я пишу time = Time('now')
, он принимает строку 'now'
и хочет поместить ее в часах.
Я знаю, что есть временные модули, которые могут это сделать, но это предназначено для обучения.
Мой код:
import random, time
class Time:
def __init__(self, hours=0, minutes=0, seconds=0, time_now=''):
# if time_now == 'now':
# now()
time = abs(3600*hours + 60*minutes + seconds)
self.hour = time//3600
self.min = time//60%60
self.sec = time%60
def __repr__(self):
return '{}:{:02}:{:02}'.format(self.hour,self.min,self.sec)
def __add__(self, other):
if isinstance(other, Time):
return Time(self.hour+other.hour, self.min+other.min, self.sec+other.sec)
if isinstance(other, int):
return Time(self.hour, self.min, self.sec+other)
__radd__ = __add__
def __sub__(self, other):
return Time(seconds = self.__int__() - other.__int__())
def __mul__(self, other):
return Time(self.hour*other.hour, self.min*other.min, self.sec*other.sec)
def __int__(self):
return 3600*self.hour + 60*self.min + self.sec
def __eq__(self, other):
return self.__int__() == other.__int__()
def __lt__(self, other):
return self.__int__() < other.__int__()
#writing out hour/min/sec what we want
def __getitem__(self, key):
if key == 0:
return self.hour
if key == 1:
return self.min
if key == 2:
return self.sec
#time now
def now():
a=(time.localtime()[3:6])
return Time(a[0],a[1],a[2])
[Хорошее видео] (https://www.youtube.com/watch?v=-5wpm-gesOY) на этом :) – wenzul
Какой смысл это умножать раз? Класс выглядит много непоследовательным для меня и для обучения. Может быть, лучший пример для перезаписи методов \ _ \ _, чем время ... – wenzul
@wenzul Посмотрите это видео позже, спасибо! О времени умножения, это глупо, но это то, что я должен был сделать: D – Matis