2011-04-07 141 views
2

說我得到了與它定義了若干類文件,像這樣:獲取的開始/結束

class A: 
    def somemethod(self): pass 
    ...more methods... 

class B: 
    def othermethod(self): pass 
    ....even more methods... 

我怎樣才能找到在源類開始其行,結束,哪一行代碼類B開始和結束?如果將文件加載到編輯器中,將文本標記爲「A類」,並且想要在A類定義的末尾插入一個方法到源代碼中,那麼我該怎麼做?我不認爲將源文件作爲純文本文件讀取會很好。

有沒有辦法找出什麼類的定義,他們實現的方法,他們的子類等沒有進口和檢查?底線:我需要找出事情的起點和終點,以便能夠操縱源,例如向類中添加方法,向現有方法添加裝飾器,從現有類中提取所有方法以及創建新的方法使用相同的方法等。

目標是在python IDE/Editor中創建智能感知。

回答

2

我建議使用標準庫Python類瀏覽器(pyclbr)爲起點。

+0

我明白了,這會起作用,但是如果源僅作爲文本可用,而不是可以導入的pythonpath中的文件呢?無論如何,我可以欺騙python導入它嗎?以某種方式操縱sys.modules? – Weholt 2011-04-07 11:19:39

+0

暫時將包含相關文件的目錄作爲'sys.path [0]'插入,允許'pyclbr'查找而不需要對模塊代碼進行任何更改,這非常簡單。另一種選擇是使用'pyclbr'作爲編寫你自己的靜態分析器的靈感。如果'pyclbr'完成了你所需要的一切,那麼前一個選項可能會更好,但是如果你想對令牌流做更多的事情,那麼自定義分析器可能最終變得非常必要。 – ncoghlan 2011-04-07 11:35:10

0

考慮解析抽象語法樹,而不是根據原始行。即使是Python,使用它的基於線條而不是基於括號的語法,也可以使用分號在一行上排列多個語句,或者使用反斜槓在兩行中分佈語句。

有很多方法可以做到這一點,但看到內置的包ast

相關問題