Python 强类型列表

6 投票
4 回答
4721 浏览
提问于 2025-04-15 13:39

我在用Eclipse写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这个属性的提示。有没有什么解决办法呢?

4 个回答

2

我想你是想说“静态类型”,而不是“强类型”。其实,Python是强类型的,只是你在编译时不知道它的类型是什么。

话说回来,你真的需要放弃寻找那些能像Java或C#那样好用的IDE(集成开发环境)来写Python的想法。因为Python的动态类型特性让这变得很困难。实际上,我发现强大的IDE有时候反而会让人觉得麻烦,而不是帮助。

4

八年后,我们终于在Python 3.6中找到了一个解决方案。

PEP484 让你可以给变量加上注释,主要是为了帮助开发环境和代码检查工具:

修改了@Hani的回答:

x : AutomataBranch = self.cfgAutomata[i] 

现在,任何好的开发环境都会识别这些注释,以突出显示错误并提供自动补全功能。

5

Python是一种强类型的编程语言,Python中的列表也是如此。你的问题出在Python是动态类型的这点上。也就是说,一个变量可以包含任何类型的数据,因此没有哪个开发工具可以准确猜测你参数的类型,也无法为你提供方法的代码补全功能。

事情就是这样,没有简单的解决办法。如果这对你来说是个问题,那可能动态语言并不适合你,你可以考虑使用更符合你开发风格的工具。总有适合每个人的工具。

撰写回答