我们有一个Django项目,今年我多次遇到这个问题。我将简化示例:class MyModel(Model): my_attr = .... ... def get_my_attr_safe(): if not self.my_attr: return somecalculation() return self.my_attr我想强制开发人员使用get_my_attr_safe()而不是my_attr.这是一个庞大而复杂的模型。我的想法是以某种方式覆盖__getattribute__并引发异常,如果它被直接调用,但我认为这行不通。而且,Django当然有时需要ModelFields直接调用,所以我不能就这样去做。如果可能Exception的method话,我想提出或确保他们获得他们必须使用的信息。例如,我需要他们在模板中随处使用该方法:{{ obj.get_my_attr_safe }}而不是{{ obj.my_attr }}解决方案不一定是Pythonic,也许有一种方法可以PyCharm只使用。就足够了。
2 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
在这里使用下划线可能会有所帮助:
class MyModel(Model):
_my_attr = None
def get_my_attr_safe(self):
if self._my_attr is None:
self._my_attr = somecalculation()
return self._my_attr
my_attr = property(get_my_attr_safe)
添加回答
举报
0/150
提交
取消