你好我在做了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.Question
(Question
类)的对象。
一切都很好,直到我在方法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新手,我不确定那里的工作原理。
我有什么问题吗?
答案 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