我正在使用eclips进行python,我遇到了一个问题。我有许多具有许多属性的类,并且需要一个来自我声明的类的对象列表。问题是:当我从列表中访问任何项目时,IDE不知道它的类型,因为在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
。然后它不会给我 Name 属性
对此有什么解决方案吗?
答案 0 :(得分:5)
您不应该编写适合您的IDE的代码 - IDE应该支持您。如果您遇到问题,请切换。有很多编辑器可以正确处理Python。
答案 1 :(得分:4)
Python是强类型的,Python列表也是如此。你的问题来自于Python是动态类型的。因此var可以包含任何类型,因此没有IDE可以猜出参数的类型,也没有给出方法的代码完成。
就是这样,没有干净的解决方法。如果这是一个问题,那么动力学语言可能不是你的偏好工具,你应该使用适合你的发展风格的东西。每个人都有工具。
答案 2 :(得分:2)
我认为你的意思是说“静态打字”而不是“强打字”。 Python是强类型的。你只是不知道编译时该类型是什么。
话虽如此,你真的需要放弃这样的想法,即你将找到任何适用于Python的IDE,就像它们对Java或C#一样。 Python的动态类型使这很困难。事实上,我倾向于发现强大的IDE比帮助更重要。
答案 3 :(得分:1)
8年后,我们实际上在Python 3.6中有了一个解决方案。
PEP484允许您主要为IDE和linting注释变量:
修改@Hani的回答:
x : AutomataBranch = self.cfgAutomata[i]
现在任何好的IDE都可以选择它来突出显示错误并允许自动完成。
答案 4 :(得分:-1)
我认为我找到了一个很好的可管理解决方案。实际上它是微不足道的,但可能有所帮助(我现在用它)。 当我想访问列表时,我将我想要访问的对象分配给变量ex:
x = AutomataBranch()
x = self.cfgAutomata[i]
第一行仅用于使IDE知道x
来自AutomatBranch
类型。之后,当我按x
时,所有方法和属性都可视化。
我认为这有点好。