【发布时间】:2017-05-22 19:20:26
【问题描述】:
考虑以下一个非常简单的迭代器示例:
class A(object):
def __init__(self, n):
self.list = [0] * n
def __iter__(self):
return AIter(self)
和
class AIter(object):
def __init__(self, a):
"""
Args:
a(A):
"""
self.obj = a
self.n = len(a.list)
self.i = 0
def __next__(self):
if self.i == self.n:
raise StopIteration
else:
self.i += 1
return self.obj.list[self.i-1]
在 PyCharm 编辑器中键入时,在定义 a=A(5) 之后,a.list[0]. 确实完成了 int 的功能。
但是,当使用 for j in a: 之类的东西时,我无法让 PyCharm 理解 j 是一个 int。它知道AIter.next() 返回一个int,它知道A.__iter__() 返回一个AIter。
这可以通过在for后面写# type: int来解决,
但这似乎是一种解决方法,我必须记住每次调用 for 或枚举时都要这样做。
我可以让 PyCharm 自动识别正确的类型吗?
【问题讨论】:
-
这是一个错误,我已经提交了问题:youtrack.jetbrains.com/issue/PY-22181
标签: iterator pycharm enumerate type-hinting