【问题标题】:Add attributes to datetime.datetime将属性添加到 datetime.datetime
【发布时间】:2014-01-17 17:21:37
【问题描述】:

我有自己的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

怎么了?

【问题讨论】:

    标签: python datetime inheritance subclass


    【解决方案1】:

    您正在更改类的属性而不是实例。您应该先创建实例,然后为其分配属性:

    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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-02
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多