我有一个布尔在我刚刚加入的系统中使用(它是Django的设置.DEBUG,但这并不重要,因为这将是方便进行测试。)
我想阻止非django使用此属性。使用我的系统的开发人员应该获得异常,告诉他们使用不同的属性:
settings.DEBUG = lambda: return_bool_or_throw_exception_if_caller_forbidden()
麻烦的是,切换到lambda需要访问者改变:
#instead of:
if settings.DEBUG:
#now:
if settings.DEBUG():
但这需要在Django代码中更改DEBUG的所有读取,这在我的情况下是不可接受的。我可以提供一个没有参数的lambda或函数,以便消费者可以在没有函数调用语义的情况下访问它吗?
答案 0 :(得分:2)
您可以修补设置类并将DEBUG设置为描述符:
def DEBUG(self):
return return_bool_or_throw_exception_if_caller_forbidden()
settings.__class__.DEBUG = property(DEBUG)