2016-09-15 53 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