改变python描述

2024-07-05 09:46:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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'
.....

我能做到吗?你知道吗

谢谢


Tags: instanceselfnonedatetimedateinitisvalue
1条回答
网友
1楼 · 发布于 2024-07-05 09:46:37

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

相关问题 更多 >