使用可选依赖的装饰器
假设我有以下代码:
try:
import bar
except ImportError:
bar = None
@bar.SomeProvidedDecorator
def foo():
pass
其中bar是一个可选的依赖项。如果 bar 未导入,则上面的代码将失败。有没有推荐的方法来处理这个问题?
我想出了:
try:
import bar
except ImportError:
bar = None
def foo():
pass
if bar is not None:
foo = bar.SomeProvidedDecorator(foo)
但我想知道是否有更好的方法来处理这个问题(即有没有办法保留装饰器语法)?
回答
在bar不可用的情况下提供标识装饰器:
try:
import bar
except ImportError:
class bar:
SomeProvidedDecorator = lambda f: f
- 如果模块 `bar` 中有很多装饰器,你可以在回退类中定义 `__getattr__`,例如 `def __getattr(self, name)__: return lambda f: f`