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

Networkx游戏地图开发中AttributeError: 'map'无'zone_map'属性问题求助

修复Zone类初始化时的AttributeError问题

问题根源

  • 你在check_border方法中错误使用了map.zone_map来访问地图对象,这里的map并非父类实例的合法引用,正确方式是通过self访问实例属性。
  • 父类Map未在初始化阶段生成zone_map属性,导致子类继承后无法直接访问该属性。

具体修复步骤

1. 完善父类Map的初始化逻辑

确保Map类在实例化时自动调用create_map生成zone_map并绑定为实例属性:

import networkx as nx

class Map:
    def __init__(self):
        # 初始化时生成zone_map实例属性
        self.zone_map = self.create_map()

    def create_map(self):
        # 你的地图生成逻辑,返回nx.Graph对象
        graph = nx.Graph()
        # 示例:添加节点和边
        graph.add_nodes_from([1, 2, 3, 4])
        graph.add_edges_from([(1,2), (2,3), (3,4)])
        return graph

2. 修正Zone类的属性引用与初始化顺序

在Zone类中,先调用父类初始化方法确保zone_map存在,再用self.zone_map访问地图对象:

class Zone(Map):
    def __init__(self, zone_id):
        # 必须先调用父类初始化,确保zone_map被创建
        super().__init__()
        self.zone_id = zone_id
        # 调用check_border生成可移动区域列表
        self.moveable_zones = self.check_border()

    def check_border(self):
        # 通过self访问zone_map实例属性
        if self.zone_id not in self.zone_map.nodes:
            return []
        # 获取当前区域的邻居节点
        return list(self.zone_map.neighbors(self.zone_id))

3. 额外排查点

  • 若你需要在Zone类中自定义zone_map,需在super().__init__()之后再覆盖该属性,避免父类的初始化逻辑被覆盖。
  • 确认create_map方法确实返回了有效的nx.Graph对象,而非None或未完成初始化的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:19