【问题标题】:Python Strongly type listsPython 强类型列表
【发布时间】:2010-11-20 06:42:35
【问题描述】:

我正在为 python 使用 eclips,但我遇到了一个问题。我有许多具有许多属性的类,并且想要一个来自我声明的类的对象列表。问题是:当我访问列表中的任何项目时,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 属性 有什么解决办法吗?

【问题讨论】:

  • 你在使用 PyDev 吗? pydev.sourceforge.net
  • self.cfgAutomata 有一个列表类型。您是否真的在尝试获取 self.cfgAutomata[] 的类型?
  • 这里有一个错字,对吧?在 __init__() 中缺少逗号: def __init__(self, params):

标签: python eclipse list strong-typing


【解决方案1】:

您不应该编写适合您的 IDE 的代码 - IDE 应该支持您。如果您遇到问题,请切换。有很多编辑器可以正确处理 Python。

【讨论】:

  • 没有 IDE 可以使用上述代码找到 self.cfgAutomata[0] 的类型,因为无法知道它的类型(在 Object 的子类之外)。
  • 实际上我正在使用 pydev,正如你所说,没有办法让 IDE 甚至 python 解释器知道属性 Name 是否存在。我想要的是让我写的方式: “AutomataBranch x”这样当我添加 x 时。然后它会帮助并查看 Name 属性。
【解决方案2】:

Python 是强类型的,Python 列表也是。您的问题来自 Python 是动态类型的这一事实。因此 var 可以包含任何类型,因此没有 IDE 可以猜测您的参数的类型是什么,也无法为您提供方法的代码完成。

就是这样,没有干净的解决方法。如果这是一个问题,那么也许动态语言不是你偏爱的工具,你应该使用适合你的开发风格的东西。每个人都有工具。

【讨论】:

    【解决方案3】:

    8 年后,我们实际上在 Python 3.6 中找到了解决方案。

    PEP484 允许您主要为 IDE 和 linting 注释变量:

    修改@Hani 的回答:

    x : AutomataBranch = self.cfgAutomata[i] 
    

    现在任何好的 IDE 都可以使用它来突出显示错误并允许自动完成。

    【讨论】:

      【解决方案4】:

      我认为您的意思是说“静态类型”而不是“强类型”。 Python 是强类型的。您只是在编译时不知道该类型是什么。

      话虽如此,您确实需要放弃这样的想法:您将找到任何适用于 Python 的 IDE,就像它们适用于 Java 或 C# 一样。 Python 的动态类型使这变得困难。事实上,我倾向于发现功能强大的 IDE 与其说是一种帮助,不如说是一种负担。

      【讨论】:

        【解决方案5】:

        我想我找到了一个很好的可管理的解决方案。实际上它是微不足道的,但可能会有所帮助(我现在使用它)。 当我想访问列表时,我将要访问的对象分配给变量 ex:

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

        第一行仅用于使 IDE 知道 x 来自 AutomatBranch 类型。之后,当我按下x 时,所有方法和属性都会被可视化。

        我认为它是一些多么好。

        【讨论】:

        • 这是一个非常糟糕的主意。以一种特殊的方式进行编码以使自动完成工作,这太疯狂了。
        • 也许你是对的,但问题不仅仅在于我一直在使用 Microsoft Visual Studio 并且突然更换到新的 IDE 并不是那么容易。当然我会在获得后重构我的代码有用。谢谢你的建议。哈尼·阿尔穆斯利....
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-06
        • 2021-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        相关资源
        最近更新 更多