python中类的条件注释

时间:2016-09-15 05:23:35

标签: python class conditional python-decorators

以下是我想要完成的代码段。请帮忙!

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

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

现在上面的内容会出现错误,以防“界面”出现错误。模块不可用,即interface_available = False。 但是,如果'界面'模块可用,注释应该在类之上使用。

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

1 个答案:

答案 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