【问题标题】:Condional annotations on a class in pythonpython中类的条件注释
【发布时间】:2025-11-24 22:20:06
【问题描述】:

下面是我要完成的代码sn-p。请帮忙!

try:
    from cinder import interface
    interface_available = True
except ImportError:
    interface_available = False

@interface.volumedriver
class EMCCoprHDFCDriver(driver.FibreChannelDriver):

现在,如果“接口”模块不可用,即 interface_available = False,上面会给出错误。 但是,如果 'interface' 模块可用,则应在类上方使用注解。

有什么办法,我可以做到吗?谢谢。

【问题讨论】:

    标签: python class conditional python-decorators


    【解决方案1】:

    是的,有。

    如果装饰器不存在,则只需使用标识装饰器执行空操作:

    try:
        from cinder.interface import volumedriver
    except ImportError:
        def volumedriver(func):
            return func
    
    @volumedriver
    class EMCCoprHDFCDriver(driver.FibreChannelDriver):
    

    为什么会这样:

    python 装饰器:

    @decorator
    def some_function:
        pass
    

    只是调用的语法糖:

    some_function = decorator(some_function)
    

    如果我们以这种方式考虑装饰器,很明显,如果我们想应用一个什么都不做的装饰器(无操作装饰器或身份装饰器),我们应该创建一个返回原始函数的装饰器。

    def identity(func):
        return func
    
    @identity
    def func():
        pass
    

    【讨论】:

      最近更新 更多