Python构造函数参数在datetime类中的顺序
问题描述:
我想包装一个datetime
类与DayTime
这将只代表24小时的一天。Python构造函数参数在datetime类中的顺序
这是我的总结:
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
是4
。
如何解释这种行为?
答
首先, '最古老' 的日期时间就可以构造是:
>>> 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
...这是Python3代码:) –
谢谢。 我想问一个问题,也许有一堂课只代表一天? –
有[日期](https://docs.python.org/2/library/datetime.html#date-objects)对象 –