日期时间类中的Python构造函数参数顺序

时间:2017-10-28 10:00:40

标签: python python-2.7 datetime constructor

我想用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

似乎year1month2day3hour为{ {1}}。
如何解释这种行为?

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