2009-08-17 64 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比帮助更重要。