2010-01-06 5 views
3

Existe-t-il un moyen d'aider PyDev à compléter le code en lui indiquant le type d'une variable?Achèvement du code Trick avec PyDev comme avec PDT?

Avec PDT, vous pouvez utiliser la syntaxe comme PHPDoc à cette fin:

/* @var $my_var MyClass */ 
$my_var = myFunction(); 
// PDT is able to figure out that $my_var is a MyClass object. 

Mais jusqu'à présent, je ne peux pas comprendre comment faire la même chose en python.

+0

duplicata possible de [Complétion de code Pydev pour tout] (http://stackoverflow.com/questions/6218778/pydev-code-completion-for-everything) –

Répondre

1

Non (voir le docs). Il semble que PyDev effectue l'achèvement des mots-clés importés et des langues.

Cela ne me semble pas être le cas. La variable en question semble être inconnue de pydev si elle a été passée en argument de fonction sans valeur par défaut.Et, si vous avez une fonction opérant sur votre propre classe, il semble que cela devrait être un membre de classe (donc la saisie semi-automatique fonctionnerait déjà).

+0

Je ne sais pas pourquoi vous dites que cela ne se produirait pas lot. Comme vous l'avez dit, chaque fois que vous passez une variable à une méthode, PyDev n'a aucun moyen de deviner son type à moins d'avoir une valeur par défaut - mais je dirais que les méthodes avec params par défaut sont très rares. ? – phtrivier

3

En fait, vous pouvez si vous le faites une isinstance assert()

Par exemple:

a = function() 
assert isinstance(a, MyClass) 
a. <- would get the proper completions 

Notez que Pydev fait analyser le retour des fonctions, donc, il est possible qu'il sait que sur un Nombre de cas.

En outre, cela ne devrait pas avoir des pénalités d'exécution si vous utilisez python -O (qui supprimera l'affirme)

3

L'astuce assert ne semble pas fonctionner pour moi avec PyDev 2.2.2; il est toujours censé?

Cependant une autre astuce que j'essayé et que le travail est la suivante:

class Foo(object): 
    def __init__(self, bar): 
     self.bar = bar 
     # Tricking PyDev 
     if (not self.bar): 
      self.bar = Bar() 
      raise Exception("Bar should not be null") 

Dans tous les cas, il semble assez hacky, et j'aimerais une manière plus propre à faire des choses (documentation, annotation, peu importe)

+0

Merci de partager cette méthode - a bien fonctionné pour moi aussi (PyDev v2.5). 'assert isinstance' ne fonctionne que dans la même méthode; il ne semble pas propager le type dans les variables d'instance. – Justin