【发布时间】:2013-09-12 16:50:26
【问题描述】:
我有这个 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'
.....
我能做到吗?
谢谢
【问题讨论】:
-
仅当描述符返回具有
format1、format2等属性(或属性)的对象时。 IE。x.thisdate将不会返回字符串 -
(不使用描述符的建议更好。)
-
另外,如果您的描述符是您的实际用例,您可以只使用 Enthought Traits。
-
除非您有明确的理由使用描述符,否则只需使用属性:
x.thisdate = datetime.date(…)。正如您所拥有的那样,您已经创建了一个绝对不执行任何操作的类 DateAttribute。使用描述符的一个不好的原因是“因为我必须在 Java/C++ 中这样做,而且我不明白为什么 Python 没有私有实例变量。”
标签: python descriptor