Python 从一个类访问另一个类中的变量

Python 从一个类访问另一个类中的变量,python,class,class-variables,Python,Class,Class Variables,我仍在做与我上一个问题相同的项目,即模拟粒子扩散。我之前的问题与此无关,除了仍然试图模拟扩散。我正处于尝试在网格内启动扩散率的不同区域的阶段,因此我有一个功能来生成列表(坐标),可以在每个移动步骤中对照粒子的坐标进行检查,以调整移动的概率,以及扩散率 我使用2个类;一个用于启动扩散网格空间grid(),另一个用于移动粒子atom()。类atom()不从类grid()继承变量。使用initiate t_space在grid()中创建了一个称为t_space的坐标区域,我想访问在atom()的ini

我仍在做与我上一个问题相同的项目,即模拟粒子扩散。我之前的问题与此无关,除了仍然试图模拟扩散。我正处于尝试在网格内启动扩散率的不同区域的阶段,因此我有一个功能来生成列表(坐标),可以在每个移动步骤中对照粒子的坐标进行检查,以调整移动的概率,以及扩散率

我使用2个类;一个用于启动扩散网格空间grid(),另一个用于移动粒子atom()。类atom()不从类grid()继承变量。使用initiate t_space在grid()中创建了一个称为t_space的坐标区域,我想访问在atom()的initiate 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_空间的代码,但是需要在grid()中计算它,因为它使用grid()中的变量

非常感谢您的帮助。

您的变量不是类属性,而是实例属性
grid()
实例化您的网格类,但您不会将该实例的
t\u空间
分配到任何地方(看起来您现在唯一的方法是在创建的对象上调用
initiate\u t\u空间(t\u空间x,t\u空间y)

如果
t_space
是一个类属性,并且对于所有网格都是相同的,那么您应该创建并定义它。如果要将其作为实例属性,则需要在引用任何实例的
t_空间之前为每个实例定义它

不管怎样,您需要调用
initiate\u t\u space(t\u space\u x,t\u space\u y)
来设置网格的
t\u space
,而您没有这样做。换句话说,您的程序从不在
insitiate\u t\u空间
函数中运行代码


一个原子真的需要知道它所在的网格吗?我想是的,这样它就可以确定该位置的扩散率,然后你就有了一个循环依赖性。。。您可以从网格类本身更新存储在网格中的atom信息。感谢您的评论,我没有提到这些类是从不同的代码页调用的:
gr=grid(20,20)gr.initiate\u t\u space(10,10)
atom()随后被调用