2016-04-19 113 views
0

我想編寫一個Pylint插件,它允許我在用某個裝飾器裝飾的方法上強制執行某種語法。強制執行函數命名約定

例如,所有的裝飾與@specialfunction裝飾的功能,必須先從「的get_」字

@specialfunction 
def get_foo(self): 
... 


@specialfunction 
def get_bar(self): 
... 

如果我的模塊具有被@specialfunction裝飾,但不get_啓動任何方法,它應該拋出一個錯誤。你能建議如何去寫這樣一個pylint插件嗎?

回答

0

是否在運行時檢查足夠好?這比寫一個pylint的插件更容易:

def specialfunction(f): 
    if not f.__name__[:4] == 'get_': 
     raise TypeError("Can't use the decorator on a non-get function") 
    return f 

@specialfunction 
def get_foo(x): 
    return "foo" 

@specialfunction # TypeError raised here 
def bar(y, z): 
    return "bar" 

This'd通常,當您導入違規模塊引發錯誤。

+0

這是一個有趣的方式,但不完全達到目的。無論如何感謝您的建議:) –