python中缺少自动完成/转换的问题

时间:2011-02-28 15:03:58

标签: python casting ide wing-ide

我有一种情况,在第一类我声明数组,并将它传递给另一个对象,该对象打印此数组中的元素名称。它有效,但是当我输入'car'时。在ReadCarNames ide中不建议我'名字'?我在翼ide 4 pro中尝试它。我可以在方法ReadCarNames中投射汽车吗?

########################################################################
class MyClass:
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        cars=[]
        cars.append(Car('bmw'))
        cars.append(Car('audi'))
        reader=Reader()
        reader.ReadCarNames(cars)

########################################################################
class Car:
    """"""

    #----------------------------------------------------------------------
    def __init__(self,name):
        self.name=name



########################################################################
class Reader:
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
    def ReadCarNames(self,cars):
        for counter,car in enumerate(cars):

            print str(counter) +' '+ car.name

4 个答案:

答案 0 :(得分:3)

见这里: http://www.wingware.com/doc/edit/helping-wing-analyze-code

您的IDE(Wing)不确定cars中的对象类型,但可以告诉它car与断言语句的对应关系它会完全按照你想要的方式完成自动完成。只有在你愿意的情况下,你才可以将它视为为Wing的眼睛投射的类型。

class Reader:
    def __init__(self):
        """Constructor"""
    def ReadCarNames(self,cars):
        for counter,car in enumerate(cars):
            assert isinstance(car, Car)        # this trains Wing
            print str(counter) +' '+ car.name  # autocompletion will work here

或者如果你不希望断言一直关闭,你可以将它包装在Wing的SourceAssistant拾取的'if 0'逻辑中但python不会执行。

if 0: assert isinstance(car, Car)

你目前无法告诉Wing列表/元组/ etc只包含一种类型的对象及其含义,但它在他们的计划中并将使用类似的语法。

答案 1 :(得分:2)

在Wing IDE中工作的一个好方法是设置一个断点,运行它,然后你将在编辑器中(在活动调试堆栈中的代码中)和Debug Probe获得运行时源分析。这在“静态和运行时分析”屏幕演示中进行了说明,在http://wingware.com/wingide/code-intelligence

上排在第二位

答案 2 :(得分:1)

IDE不知道从枚举返回的类型,因此在这种情况下无法执行自动完成。它也不知道cars列表包含Car

答案 3 :(得分:1)

由于Python的动态特性,在不运行代码的情况下,无法知道实例的类型,甚至不知道它具有什么属性。例如,您的Car实例在实例化之前没有name属性,因此即使IDE以某种方式知道carCar实例,它也会有一个时间的魔鬼弄清楚它将具有静态的属性。

这取决于您的IDE,但某些IDE(例如Python附带的IDLE)将在运行脚本后提供更好的结果。但在这种情况下,可能不是。