You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类中如何在一个方法中引用另一个方法生成的列表

问题原因与修复方案

核心问题

  • 你在build_index方法中定义的points是局部变量,仅在该方法运行期间有效,方法执行结束后就会被回收,其他方法无法直接访问
  • build_index的形参也命名为points,方法内部又直接执行points = []赋值,完全覆盖了传入的参数,这部分逻辑是冗余无效的
  • search方法中直接调用points变量,Python找不到该变量的作用域,自然会抛出变量未定义的错误

另外你原有search方法的逻辑存在功能缺陷:当前仅存储并返回了距离值,没有绑定对应的Point对象,和你标注的[Point]返回类型不符。

修复方案

修改逻辑为将构建好的points列表存为实例属性,用self.前缀修饰,即可跨方法共享访问,同时修正search的功能逻辑:

class naiveNN(nearestneigh):
    def build_index(self):
        # 把points存为实例属性,其他方法可以通过self.points访问
        self.points = []
        with open('sampleData.txt', 'r') as file:
            for line in file:
                line = line.strip('\n').split(' ')
                point_id = line[0]
                cat = line[1]
                lat = line[2]
                lon = line[3]
                point = Point(point_id, cat, lat, lon)
                self.points.append(point)
        return self.points

    def search(self, search_term: Point, k: int) -> [Point]:
        # 存为(距离, 点对象)的元组,排序后可以直接拿到对应的Point
        distance_neigh = []
        for point in self.points:
            distance = Point.dist_to(point, search_term)
            distance_neigh.append((distance, point))
        # 按距离排序后提取前k个对应的Point对象返回
        sorted_nigh = [item[1] for item in sorted(distance_neigh)[:k]]
        return sorted_nigh

使用时需要先调用build_index初始化索引,再调用search方法查询,示例:

nn = naiveNN()
nn.build_index()
result = nn.search(待查询的Point对象, 5)

内容的提问来源于stack exchange,提问作者vitaminSí

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:18:01