首页 > 解决方案 > 访问另一个类中的一个类的变量

问题描述

我仍在做与我之前尝试模拟粒子扩散的问题相同的项目。我之前的问题与此无关,除了仍在尝试模拟扩散。我正处于尝试在网格内启动不同扩散区域的阶段,所以我有一个函数可以生成一个列表(坐标)列表,可以在每个移动步骤检查粒子的坐标以调整概率运动,以及扩散性。

我正在使用 2 个课程;一个用于启动扩散网格空间,grid(),另一个用于移动粒子,atom()。atom() 类不从 grid() 类继承变量。使用启动 t_space 在 grid() 中创建了一个名为 t_space 的坐标区域,我想访问在 atom() 中的启动 t_space 中生成的这个变量 t_space。

我的代码很长,所以我已经包含了我希望是相关的部分,以及我目前解决这个问题的尝试。

我希望从 atom() 中的 grid() 调用 t_space 变量的代码是:

atom().tspace = grid().t_space

class grid():
    
    def __init__(self, x, y):
        self.grid = np.zeros((x,y))
        self.list_of_atoms=[]
        self.x = x
        self.y = y
        
    def initiate_t_space(self,t_space_x, t_space_y): 

         self.t_space = []
         for i in range(0,self.t_space_x):
             for j in range(0,self.t_space_y):
                 self.t_space.append([i,j])

 class atom():

    def __init__(self,x,y):
        self.position=[x,y]
        self.position_tracker=[]
        self.dx=0
        self.dy=0
        # self.tspace = [[11, 42], [11, 43], [11, 44], [11, 45], [11, 46], [11, 47], [11, 48], [11, 49], [11, 50], [11, 51], [11, 52], [11, 53], [11, 54], [11, 55], [11, 56], [11, 57], [11, 58], [12, 38], [12, 39], [12, 40], [12, 41], [12, 42], [12, 43], [12, 44], [12, 45], [12, 46], [12, 47], [12, 48]]
        # self.t_space = []
        # for i in range(0,100):
        #     for j in range(0,200):
        #         self.t_space.append([i,j])
        # print(self.t_space)
        atom().tspace = grid().t_space

atom() 类中注释掉的代码是先前在 atom() 中启动 t_space 的尝试,但是它需要在 grid() 中计算,因为它使用来自 grid() 的变量。

任何帮助将不胜感激。

标签: pythonclassclass-variables

解决方案


您的变量不是类属性,而是实例属性grid()实例化您的网格类,但您没有在t_space任何地方分配该实例(看起来您现在唯一的方法是调用initiate_t_space(t_space_x, t_space_y)该创建的对象)。

如果t_space打算作为一个类属性并且对于所有网格都相同,则应该这样创建和定义它。如果它打算成为实例属性,则需要在引用任何实例的t_space任何位置之前为每个实例定义它。

无论如何,您需要调用initiate_t_space(t_space_x, t_space_y)set grid's t_space,而您没有这样做。换句话说,你的程序永远不会在你的insitiate_t_space函数中运行代码。

阅读更多关于类


推荐阅读