我有一个python描述符:
# Date Descriptor
class DateAttribute():
def __init__(self, value=None):
self.value = value
def __get__(self, instance, value):
return self.value
def __set__(self, instance, value):
if type(value) is not datetime.date:
raise TypeError('A date value is expected')
self.value = value
以及使用此描述符的D类:
class D:
thisdate = DateAttribute()
我用这个类作为:
x = D()
x.thisdate = datetime.date(2012, 9, 12)
我想扩展这个描述符,以便在某些方面给出格式化的结果。锿。
x.thisdate.format1
>>> '2012 9 12'
x.thisdate.format2
>>> '2012___9___12'
x.thisdate.format3
>>> '2012####9####12'
.....
我能做到吗?
谢谢
最佳答案
将formatX
属性添加到类中,并相应地设置格式:
class DateAttribute:
...
@property
def format1 (self): return self.value.strftime (SOMEFORMAT)
@property
def format2 (self): return self.value.strftime (SOMEOTHERFORMAT)
对于strftime格式的字符串,see the datetime documentation。
工作方式如下:
thisdate = DateAttribute (datetime.date (2012, 9, 12) )
print (thisdate.format1)
编辑:
#! /usr/bin/python3
import datetime
class DateAttribute:
def __init__(self, value=None):
print ('initing')
self.value = value
def __get__(self, instance, value):
print ('getting')
if not self.value: return self.value
return FormattedDate (self.value.year, self.value.month, self.value.day)
def __set__(self, instance, value):
print ('setting')
if not isinstance (value, datetime.date): raise TypeError('A date value is expected')
self.value = value
class FormattedDate (datetime.date):
@property
def format1 (self): return self.strftime ('%Y==%m==%d')
class D:
thisdate = DateAttribute ()
d = D ()
print (d.thisdate)
d.thisdate = datetime.date (2013, 1, 1)
print (d.thisdate)
print (d.thisdate.format1)
生成此输出:
initing
getting
None
setting
getting
2013-01-01
getting
2013==01==01