2009-08-17 65 views
2

我正在使用eclips for python,並且我正面臨一個問題。我有很多具有許多屬性的類,並且需要我的一個聲明類中的對象列表。問題是:當我訪問列表中的任何項目時,IDE不知道它的類型,因爲在python中我們沒有聲明變量的類型,所以沒有自動完成,我必須去類複製屬性名稱。 爲了讓想法更加清晰:Python強類型列表

class AutomataBranch(object): 
    def __init__(selfparams): 
     self.Name=""; 
     self.nodes=[]; 

class LanguageAutomata(object):  
    def __init__(selfparams): 
     self.cfgAutomata=[];#This has AutomaBranch Type 

現在在LanguageAutomata類中的任何方法,如果我寫道: cfgAutomata。然後它不會給我名稱屬性 有沒有解決方案?

+0

你在使用PyDev嗎? http://pydev.sourceforge.net/ – mcandre 2009-08-17 14:57:31

+0

self.cfgAutomata有一個列表類型。你是否真的試圖獲得self.cfgAutomata類型[]? – 2009-08-17 15:15:56

+1

這裏有一個錯字,對不對?在_ \ _ _ _ _ _ _ _ _ _ _ _ _ _ _中初始化一個逗號def __init __(self,params): – hughdbrown 2009-08-17 15:20:10

回答

5

您不應該編寫適合您的IDE的代碼 - IDE應該支持您。如果您遇到問題,請切換。有很多編輯器正確處理Python。

+2

沒有IDE會用上面的代碼找到self.cfgAutomata [0]的類型,因爲那裏沒有辦法知道它的類型(Object的子類之外)。 – 2009-08-17 15:16:36

+1

其實我正在使用pydev,正如你所說,沒有辦法讓IDE甚至python解釋器知道屬性名是否存在。我想要的方式是讓我寫: 「AutomataBranch x」這樣的當我添加x。那麼它有助於並查看Name屬性。 – Hani 2009-08-17 19:11:19

-2

我想我找到了一個很好的管理解決方案。其實這是微不足道的,但可能會有所幫助(我現在使用它)。 當我想訪問列表,然後我給你,我想訪問變量前的對象:

x = AutomataBranch() 
x = self.cfgAutomata[i] 

第一行僅用於使IDE知道xAutomatBranch型。之後,當我按x時,所有的方法和屬性都可視化。

我覺得這有些多好。

+2

這是一個非常糟糕的主意。以特殊的方式進行編碼以使自動完成工作,這是瘋狂的。 – 2009-08-18 11:52:56

+2

也許你是對的,但問題在於,我總是使用Microsoft Visual Studio,突然改變爲新的IDE並不容易。當然,我將在得到它之後重構我的代碼。 感謝您的建議。 Hani Almousli .... – Hani 2009-08-18 21:37:05

4

Python是強類型的,Python列表也是。你的問題來自於Python是動態類型的。因此,var可以包含任何類型,因此IDE不能猜測參數的類型是什麼,也不能爲這些方法提供代碼完成。

這是如何,沒有乾淨的解決方法。如果這是一個問題,那麼也許動力學語言不是你的偏好工具,你應該使用適合你的開發風格的東西。每個人都有工具。

2

我想你的意思是說「靜態類型」而不是「強類型」。 Python是強類型的。你只是不知道編譯時的類型是什麼。這就是說,你真的需要放棄這樣一個想法,即你將找到任何適用於Python的IDE,就像它們爲Java或C#所做的一樣。 Python的動態類型使得這很困難。事實上,我傾向於發現強大的IDE比幫助更重要。