2016-09-15 69 views
0

下面是我想要完成的代码片段。请帮忙!python中的类的条件注释

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

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

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

有没有办法,我可以做到这一点?谢谢。

回答

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) 

如果我们以这种方式考虑装饰器,很明显如果我们想要应用一个不做任何事情的装饰器(无操作装饰器或身份装饰器),我们应该制作一个装饰器来返回原始功能。

def identity(func): 
    return func 

@identity 
def func(): 
    pass