Skip to main content
 首页 » 编程设计

python之为什么所有对象都使用相同的坐标填充

2025年05月04日12Terrylee

我正在为机器人创建一个程序来绘制迷宫。我在 Python 中执行此操作,问题是当我尝试通过遍历对象来创建 3D 数组时,每个对象都会以某种方式填充 [9, 9, 2]。

class Field: 
    coordinates = {} 
 
    def __init__(self, x_arg, y_arg, z_arg = None): 
        self.coordinates['x'] = x_arg 
        self.coordinates['y'] = y_arg 
        if z_arg is not None: 
            self.coordinates['z'] = z_arg 
        else: 
            self.coordinates['z'] = 0 
 
    def update_location(self, x_arg, y_arg, z_arg = None): 
        del self.coordinates['x'] 
        del self.coordinates['y'] 
 
        self.coordinates['x'] = x_arg 
        self.coordinates['y'] = y_arg 
 
        if z_arg is not None:  
            del self.coordinates['z'] 
            self.coordinates['z'] = z_arg 
 
    def __repr__(self): 
        return "[" + str(self.coordinates['x']) + ", " + str(self.coordinates['y']) + ", " + str(self.coordinates['z']) + "]" 
 
    def __str__(self): 
        return "[" + str(self.coordinates['x']) + ", " + str(self.coordinates['y']) + ", " + str(self.coordinates['z']) + "]" 
 
 
map = [[[Field(current_x, current_y, current_z) for current_z in xrange(3)] for current_y in xrange(10)] for current_x in xrange(10)] 

请您参考如下方法:

您已经在类级别定义了坐标,以便在所有Field 实例之间共享该属性。要解决此问题,请尝试在 __init__ 方法中定义 coordinates:

class Field: 
 
    def __init__(self, x_arg, y_arg, z_arg = None): 
        self.coordinates = {} 
        self.coordinates['x'] = x_arg 
        self.coordinates['y'] = y_arg 
        ...