下面是datetime的子类示例代码。
由于pass是唯一的子类体,方法' __ new __'日期时间预计将保留。
以下代码已经在Mac OS 10.12.3上的Python 3.4.2和Arch Linux上的Python 3.6.0上进行了测试。在这两种情况下,结果相同。
问题是,为什么' a'当' b'是一个MyDatetime的实例。当它们仅仅通过参数tz?
不同时,它不是MyDatetime的实例感谢您的反馈。现在开始举例......
#!/usr/bin/env python3
from datetime import datetime
from datetime import timezone
class MyDatetime(datetime):
pass
if __name__ == '__main__':
dt = 1231798102
a = MyDatetime.fromtimestamp(dt)
b = MyDatetime.fromtimestamp(dt, tz=timezone.utc)
print('Why is isinstance(a, MyDatetime) == {}, while isinstance(b, MyDatetime) == {}?'.format(isinstance(a, MyDatetime), isinstance(b, MyDatetime)))
以上示例打印以下内容: '为什么isinstance(a,MyDatetime)== True,而isinstance(b,MyDatetime)== False?'
此处为type(a) == <class '__main__.MyDatetime'>
,而type(b) == <class 'datetime.datetime'>
。
答案 0 :(得分:0)
在tz
中传递MyDatetime.fromtimestamp(dt, tz=timezone.utc)
会调用tz.fromutc
in the implementation,它会返回一个新的datetime
对象,而忽略您创建的实际子类。
一,但我怀疑确保你的班级得到考虑的最有效方法是:
class MyDatetime(datetime):
@classmethod
def fromtimestamp(cls, t, tz=None):
result = super().fromtimestamp(t, tz)
if tz:
print(result.strftime("%s"))
return super().fromtimestamp(int(result.strftime("%s")))
return result