以下是我想要完成的代码段。请帮忙!
try:
from cinder import interface
interface_available = True
except ImportError:
interface_available = False
@interface.volumedriver
class EMCCoprHDFCDriver(driver.FibreChannelDriver):
现在上面的内容会出现错误,以防“界面”出现错误。模块不可用,即interface_available = False。 但是,如果'界面'模块可用,注释应该在类之上使用。
有什么办法,我可以这样做吗?谢谢。
答案 0 :(得分:0)
是的。
如果装饰器不存在,那么只需使用身份装饰器执行无操作:
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)
如果我们以这种方式考虑装饰器,很明显,如果我们想要应用一个什么也不做的装饰器(no-op装饰器或身份装饰器),我们应该制作一个返回原始函数的装饰器。
def identity(func):
return func
@identity
def func():
pass