2009-08-17 9 views
2

J'utilise des éclipses pour python et je suis confronté à un problème. J'ai beaucoup de classes avec beaucoup de propriétés et veux une liste d'objets d'une de mes classes déclarées. Le problème est: Quand j'accède à un élément de la liste, l'EDI ne sait pas qu'il est de type car en python nous ne déclarons pas la variable avec son type, donc il n'y a pas d'auto complète et je dois aller à la classe pour copier le nom de l'attribut. Pour faire idée plus claire:Python Fortement les listes de type

class AutomataBranch(object): 
    def __init__(selfparams): 
     self.Name=""; 
     self.nodes=[]; 

class LanguageAutomata(object):  
    def __init__(selfparams): 
     self.cfgAutomata=[];#This has AutomaBranch Type 

maintenant dans toute méthode en classe LanguageAutomata si je l'ai écrit: cfgAutomata. Alors il ne me donnera pas le Nom attribut Y at-il une solution pour cela?

+0

Utilisez-vous PyDev? http://pydev.sourceforge.net/ – mcandre

+0

self.cfgAutomata a un type de liste. Êtes-vous en train d'essayer d'obtenir le type de self.cfgAutomata []? –

+1

Il y a une faute de frappe ici, non? Missing une virgule dans le \ _ \ _ init \ _(): def __init __ (self, params): – hughdbrown

Répondre

5

Vous ne devriez pas écrire du code en fonction de votre IDE - l'EDI est censé vous aider. Si vous avez des problèmes avec, alors changez. Il y a beaucoup d'éditeurs qui traitent correctement Python.

+2

Il n'y a aucun IDE qui va trouver le type de self.cfgAutomata [0] avec le code ci-dessus, comme il est pas moyen de connaître son type (en dehors d'une sous-classe d'objet). –

+1

En fait j'utilise pydev et comme vous l'avez dit il n'y a aucun moyen de laisser l'interpréteur IDE ou même python de savoir si la propriété Name existe ou non.Ce que je veux est de manière à écrire: "AutomataBranch x" tel que quand j'ajoute x. alors cela aide et affiche la propriété Name. – Hani

-2

Je pense avoir trouvé une bonne solution gérable. En fait c'est trivial mais peut aider (je l'ai utilisé maintenant). Lorsque je veux accéder à la liste alors j'assignez l'objet que je veux accéder à une variable ex:

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

La première ligne est utilisée uniquement pour rendre l'IDE sait que x est à partir du type AutomatBranch. Après cela, lorsque j'appuie sur x, toutes les méthodes et propriétés sont visualisées.

Je pense que c'est un peu bon.

+2

C'est une très mauvaise idée. Coder d'une manière spéciale pour faire l'autocomplétion fonctionne, c'est CRAZY. –

+2

Peut-être que vous avez raison, mais le problème réside au-delà du fait que je suis toujours en train d'utiliser Microsoft Visual Studio et de changer soudainement pour un nouvel IDE n'est pas facile. Bien sûr, je vais refactoriser mon code. Merci pour votre aide. Hani Almousli .... – Hani

4

Python est fortement typé et les listes Python le sont aussi. Votre problème vient du fait que Python est dynamiquement typé. Par conséquent, un var peut contenir n'importe quel type, et par conséquent aucun IDE ne peut deviner quel est le type de votre paramètre, ni vous donner l'achèvement du code pour les méthodes.

Voici comment c'est, il n'y a pas de solution de contournement propre. Si c'est un problème, alors le langage dynamique n'est peut-être pas votre outil de prédilection et vous devriez utiliser quelque chose qui correspond à votre style de développement. Il y a des outils pour tout le monde.

2

Je pense que vous voulez dire "statiquement typé" au lieu de "fortement typé". Python est fortement typé. Vous ne savez pas ce que ce type est au moment de la compilation. Cela dit, vous avez vraiment besoin d'abandonner l'idée que vous allez trouver des IDE qui fonctionnent aussi bien pour Python que pour Java ou C#. Le typage dynamique de Python rend cela difficile. En fait, j'ai tendance à trouver que les puissants IDE sont plus un fardeau qu'une aide.

Questions connexes