我想用datetime
包裹一个DayTime
课程,这个课程只代表一天24小时。
这是我的包装:
class DayTime(datetime):
def __init__(self, hour=0, minute=0, second=0, microsecond=0):
super(DayTime, self).__init__(0, 0, 0, hour, minute, second, microsecond)
但是当我为它编写测试时:
def test_day_time_object(self):
time = DayTime(1, 2, 3, 4)
self.assertEqual(time.year, 0)
self.assertEqual(time.month, 0)
self.assertEqual(time.day, 0)
self.assertEqual(time.hour, 1)
self.assertEqual(time.minute, 2)
self.assertEqual(time.second, 3)
self.assertEqual(time.microsecond, 4)
我得到了
AssertionError:1!= 0
似乎year
为1
,month
为2
,day
为3
,hour
为{ {1}}。
如何解释这种行为?
答案 0 :(得分:0)
首先,您可以构建的“最早的”日期时间是:
>>> import datetime as dt
>>> dt.datetime.min
datetime.datetime(1, 1, 1, 0, 0)
您需要使用__new__
代替__init__
,因为'原始'类没有__init__
方法:
class DayTime(dt.datetime):
def __new__(cls, hour=0, minute=0, second=0, microsecond=0):
return super().__new__(cls, 1, 1, 1, hour, minute, second, microsecond, tzinfo= None)
d1 = DayTime(1,2,3,4)
print(d1)
d2 = DayTime(4,3,2,1)
print(d2)
返回:
0001-01-01 01:02:03.000004
0001-01-01 04:03:02.000001