【发布时间】:2018-11-04 06:59:03
【问题描述】:
我在 PyCharm 中收到 unresolved attribute reference 'get_opposite_node' for class 'list' 警告,即使代码运行良好。
这是代码的相关部分:
def bfs(self, start, end):
visited = {start} # visited set contains int indices
start_node = self.Node(start)
q = deque()
q.append(start_node) # deque contains Node objects
while q:
cur_node = q.popleft() # Node object
if cur_node.idx == end:
return cur_node
for edge in self.get_out_edges(cur_node):
# HERE IS WHERE I GET THE WARNING:
child = self.Node(edge.get_opposite_node(i))
child_idx = child.idx
if child_idx not in visited:
visited.add(child_idx)
q.append(child)
child.parent = cur_node
return None
def get_out_edges(self, node):
return self.adj[node.idx]
def add_edge(self, line):
# line is just a string from the input file
(v, u, w) = [int(x) for x in line.split()]
e = Edge(v,u,w)
self.adj[v].append(e)
self.adj[u].append(e)
self.edges.append(e)
self.adj是列表的列表:self.adj = [[] for _ in range(N)],后来被Edge类的边缘填充:
class Edge:
def __init__(self, v, u, w):
self.v = v
self.u = u
self.w = w
def get_node(self):
return self.v
def get_opposite_node(self, k=None):
return self.u if k == self.v or k is None else self.v
所以,基本上,虽然self.adj[i] 包含Edges,但 PyCharm 认为它包含列表(?)。有没有办法“说服”PyCharm 它不是这样的?
【问题讨论】: