【问题标题】: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