추가

2014-01-17 2 views
2

내가 datetime.datetime에서 서브 클래스 인 DateTime 내 자신이 datetime.datetime 속성 :추가

class DateTime(datetime.datetime): 
    def __new__(cls, **kwargs): 
     cls.my_attr = kwargs.pop('my_attr') 
     return datetime.datetime.__new__(cls, **kwargs) 

나는 cls.my_attr입니다 같은 객체를 하나 개 이상의 인스턴스 각 instance.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 

무엇이 잘못 되었나요?

답변

3

인스턴스가 아닌 클래스의 attr을 변경하고 있습니다. 당신은 첫 번째 인스턴스를 생성 한 다음에 ATTRIB를 지정해야합니다 :

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

덕분에 많은 ...! – mutetella