2009-08-17 1 views
2

Я использую eclips для python, и перед вами стоит проблема. У меня много классов со многими свойствами и вам нужен список объектов из одного из моих объявленных классов. Проблема заключается в следующем: когда я получаю доступ к любому элементу из списка, среда IDE не знает, что это тип, потому что в python мы не объявляем переменную с ее типом, поэтому нет автоматического завершения, и мне нужно перейти к классу для копирования имя атрибута. Чтобы сделать идею более ясно: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. Тогда это не даст мне Имя атрибут Есть ли какое-либо решение для этого?

+0

Вы используете PyDev? http://pydev.sourceforge.net/ – mcandre

+0

self.cfgAutomata имеет тип списка. Вы действительно пытаетесь получить тип self.cfgAutomata []? –

+1

Опечатка здесь, не так ли? Пропуская запятую в \ _ \ _ init \ _ \ _(): def __init __ (self, params): – hughdbrown

ответ

5

Вы не должны писать код в соответствии с вашей IDE - предполагается, что IDE будет поддерживать вас. Если у вас возникли проблемы с этим, переключитесь. Существует множество редакторов, которые правильно работают с Python.

+2

Нет IDE, который найдет тип self.cfgAutomata [0] с приведенным выше кодом, так как там не может знать его тип (вне подкласса объекта). –

+1

На самом деле я использую pydev, и, как вы сказали, нет возможности дать возможность IDE или даже интерпретатору python знать, существует ли имя свойства или нет. Что я хочу, это способ, который позволяет мне писать: «AutomataBranch x», когда я добавляю x. то он помогает и рассматривает свойство Name. – Hani

-2

Я думаю, что нашел хорошее управляемое решение. На самом деле это тривиально, но может помочь (я использовал его сейчас). Когда я хочу, чтобы получить доступ к списку, то я назначить объект, который я хочу, чтобы получить доступ к переменной ех:

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

Первая линия используется только сделать IDE знает, что x от AutomatBranch типа. После этого, когда я нажимаю x, тогда визуализируются все методы и свойства.

Я думаю, что это как-то хорошо.

+2

Это очень плохая идея. Кодирование особым образом, чтобы сделать автозаполнение, это CRAZY. –

+2

Возможно, вы правы, но проблема заключается в том, что я всегда использую Microsoft Visual Studio, и внезапное изменение на новую IDE не так просто. Конечно, я собираюсь реорганизовать свой код после его работы. Спасибо за ваш совет. Hani Almousli .... – Hani

4

Python строго типизирован и списки Python тоже. Ваша проблема связана с тем, что Python динамически типизирован. Поэтому var может содержать любой тип, и поэтому никакая среда IDE не может угадать, что является типом вашего параметра, и не дает вам завершения кода для методов.

Так оно и есть, нет обходного пути. Если это проблема, то, возможно, язык динамики - это не инструмент притяжения, и вы должны использовать что-то, что соответствует вашему стилю разработки. Есть инструменты для всех.

2

Я думаю, вы хотите сказать «статически типизированный» вместо «строго типизированного». Python строго типизирован. Вы просто не знаете, что такое тип во время компиляции.

С учетом этого вам действительно нужно отказаться от идеи, что вы собираетесь найти любые IDE, которые также работают для Python, как и для Java или C#. Динамическая типизация Python делает это сложным. Фактически, я, как правило, обнаруживаю, что мощные IDE больше бремени, чем помощь.