PyDev不知道数组包含什么类型

时间:2014-07-05 14:14:01

标签: python arrays pydev

你好我在做了1年之后开始使用Python了,在java之后学习是一个非常艰难的时刻,因为在python中一切都是不同的OO明智的,我在Java之前做了2年的PHP所以PHP和Python OO明智的很漂亮类似。

到目前为止,我有这个脚本,这两个类:

import random

class Questions(object):

    questions = [Questions.Question("Is Jony mad?", False),
                 Questions.Question("Is Jony happy?", True)]

    currentQuestion = None;

    def __init__(self):
        pass


    def generateQuestion(self):
        self.currentQuestion = self.questions[random.randint(0, len(self.questions))]

    def answerQuestion(self, answer):
        if (answer == self.questions[0].

class Question:

    question = None
    answer = None

    def __init__(self, question, answer):
        self.question = question
        self.answer = answer

    def getQuestion(self):
        return self.question

    def getAnswer(self):
        return self.answer

它们位于名为Questions的文件中。

我有数组问题,其中应包含Questions.QuestionQuestion类)的对象。

一切都很好,直到我在方法answerQuestion

中到达这一行
def answerQuestion(self, answer):
    if (answer == self.questions[0].

当我self.questions[0].时,PyDev没有提供对象包含哪些方法的建议,但是当我self.currentQuestion.时,我得到了建议,但不是来自Question类,而是我得到的方法数组例如count(value)remove(index)

我认为这是因为Eclipse PyDev不知道questions数组是什么类型。

在PHPStorm IDE中,我通常会/** @var Object **/,但我是Python新手,我不确定那里的工作原理。

我有什么问题吗?

1 个答案:

答案 0 :(得分:2)

PyDev不能假设Python列表包含什么;您可以将任何内容存储在列表中,包括列表本身。

可以做出断言;如果你这样做,那么PyDev对该类型了解得足够多,因为断言会失败:

def answerQuestion(self, answer):
    question = self.questions[0]
    assert isinstance(question, Question)
    if answer == question.  # now auto-completion will work

看起来这只适用于直接引用的断言,而不适用于self.questions[0]

您还可以使用Sphinx or Epydoc style type assertion in a comment

def answerQuestion(self, answer):
    question = self.questions[0]  #: :type question Question
    if answer == question.  # now auto-completion will work