使用可选依赖的装饰器

Using decorators of optional dependency

假设我有以下代码:

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