我有自己的DateTime
,它是datetime.datetime
的一个子类:
class DateTime(datetime.datetime):
def __new__(cls, **kwargs):
cls.my_attr = kwargs.pop('my_attr')
return datetime.datetime.__new__(cls, **kwargs)
当我创建一个或多个实例时,每个instance.my_attr
指向同一个对象cls.my_attr
:
>>> dt1 = DateTime(**{'year': 2014, 'month': 1, 'day': 17, 'hour': 18, 'minute': 10, 'my_attr': 'dt1'})
>>> dt1.my_attr
'dt1'
>>> dt2 = DateTime(**{'year': 2015, 'month': 2, 'day': 18, 'hour': 19, 'minute': 11, 'my_attr': 'dt2'})
>>> dt1.my_attr
'dt2'
>>> dt2.my_attr
'dt2'
>>> id(dt1.my_attr)
23429768
>>> id(dt2.my_attr)
23429768
>>> id(DateTime.my_attr)
23429768
怎么了?
答案 0 :(得分:3)
您正在更改类的attr而不是实例。您应首先创建实例,然后为其分配属性:
class DateTime(datetime.datetime):
def __new__(cls, **kwargs):
my_attr = kwargs.pop('my_attr')
dt = datetime.datetime.__new__(cls, **kwargs)
dt.my_attr = my_attr
return dt
测试:
>>> dt1 = DateTime(**{'year': 2014, 'month': 1, 'day': 17, 'hour': 18, 'minute': 10, 'my_attr': 'dt1'})
>>> dt2 = DateTime(**{'year': 2015, 'month': 2, 'day': 18, 'hour': 19, 'minute': 11, 'my_attr': 'dt2'})
>>> dt1.my_attr
'dt1'
>>> dt2.my_attr
'dt2'