我对Python完全陌生,我正试图编写一个类,它只存储两个属性,一个是数字,另一个是datetime对象。虽然我也希望在将date
存储为日期时间时,使用类似于“的字符串初始化并输出它”年月日". 所以我要说:
class MyClass:
number = None
date = None
def __init__(self, params):
self.number = params["number"]
self.date = params["date"]
@property
def date(self):
return datetime.datetime.strftime(self.date, '%d.%m.%Y')
@date.setter
def date(self, value):
self.date = datetime.datetime.strptime(value, '%d.%m.%Y')
def get_vars(self):
return vars(self)
但是在运行时@property
指向self.date
,并说:Expected type 'datetime', got 'str' instead
。它怎么可能得到一个字符串,当它被转换成日期时设置。为什么会这样?困惑的。在
例如:
^{pr2}$
不能将
date
同时用于property
对象和实例属性。只有属性可用(因为它是data descriptor),并且self.date
引用了该属性对象。表达式self.date = params['date']
正在将param['date']
值传递给setter,它没有设置实例属性。在因为在您的例子中,
param['date']
显然是一个datetime
对象,这意味着在setter中,datetime.datetime.strptime(<datetime instance>, '%d.%m.%Y')
被调用,这将失败。即使成功了,您也可以尝试将结果赋回self.date
,这将再次调用setter,无穷大。它是一个datetime
实例,因为您最初传递了一个datetime
值,或您传入了一个字符串,第一个.strptime()
调用成功了,现在,self.date
被分配给刚刚创建的datetime
实例。在重命名实例属性;在此处为其添加一个前导下划线通常是最有用的命名方案:
我还将
datetime.datetime.strftime(self._date, '%d.%m.%Y')
(对未绑定方法的调用)更改为对self._date
的方法调用。在相关问题 更多 >
编程相关推荐