2017-10-28 88 views
0

我想包装一个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

看来,year1month2day3hour4
如何解释这种行为?

回答

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 
+0

...这是Python3代码:) –

+0

谢谢。 我想问一个问题,也许有一堂课只代表一天? –

+0

有[日期](https://docs.python.org/2/library/datetime.html#date-objects)对象 –