【发布时间】:2013-07-30 12:58:50
【问题描述】:
是否可以使用 python 装饰器“停用”功能?举个例子:
cond = False
class C:
if cond:
def x(self): print "hi"
def y(self): print "ho"
是否可以像这样用装饰器重写这段代码?:
class C:
@cond
def x(self): print "hi"
def y(self): print "ho"
背景:在我们的库中,一些依赖项(如 matplotlib)是可选的,只有少数函数需要这些依赖项(用于调试或前端)。这意味着在某些系统上 matplotlib 未安装在其他系统上,但在两者上都应该运行(核心)代码。因此,如果未安装 matplotlib,我想禁用某些功能。有这么优雅的方式吗?
【问题讨论】:
-
您为什么需要这样做?额外的功能几乎不占用资源。如果禁用这些方法是否会引发属性错误?
-
定义
disable。如果你的意思是把函数变成空操作,这可以通过返回lambda *_: None的装饰器轻松完成。 -
在最好的情况下,它们应该消失或只记录未安装 matplotlib 的警告。
标签: python decorator python-decorators