我有一种情况,在第一类我声明数组,并将它传递给另一个对象,该对象打印此数组中的元素名称。它有效,但是当我输入'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
答案 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以某种方式知道car
是Car
实例,它也会有一个时间的魔鬼弄清楚它将具有静态的属性。
这取决于您的IDE,但某些IDE(例如Python附带的IDLE)将在运行脚本后提供更好的结果。但在这种情况下,可能不是。