如何解决在pyhon中正确使用财产
我在python中使用属性遇到了一个有趣的情况。该属性定义为带有装饰器@property
的方法:
@hybrid_property
def purchase_date(self) -> datetime:
return self.suborder.buyout_date
我拥有混合财产,但我相信情况不会改变。
然后我尝试在同一类的另一个方法中使用属性:
temp = self.purchase_date
print(temp.strftime('%Y-%m-%d'))
因为我希望属性值的类型为datetime
,所以我在这里不会遇到任何问题。但是我遇到一个错误:
AttributeError: 'hybrid_property' object has no attribute 'strftime'
因此,我尝试更深入地研究属性。我知道这是一种方法。因此,当我进行赋值时,我可能不会赋值属性值,而只是赋值一个函数。好的,调用方法:
temp = self.purchase_date()
...并收到错误'hybrid_property' is not callable
因此,我进一步挖掘了self.purchase_date的属性并进行了检查。我看到有fget
方法,所以我尝试调用它:
temp = self.purchase_date.fget(self)
现在我已经有了期望值。我的问题是-在Python中使用属性是否正常?
解决方法
纯Python @property
的行为与reqular属性完全相同,包括在调用setter的情况下处理setattr(instance,property)
。
问题发生在@hybrid_property
上,它是sqlalchemy装饰器,以不同的方式实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。