从一个班级访问另一个班级的变量

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

我正在使用2节课;一种是启动扩散网格空间grid(),另一种是移动粒子atom()。 atom()类不会从grid()类继承变量。使用initiate t_space在grid()中创建了一个称为t_space的坐标区域,我想访问在atom()中initial 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,y):
        self.position=[x,y]
        self.position_tracker=[]
        self.dx=0
        self.dy=0
        # self.tspace = [[11,42],[11,43],44],45],46],47],48],49],50],51],52],53],54],55],56],57],58],[12,38],39],40],41],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()中进行计算。

任何帮助将不胜感激。

iCMS 回答:从一个班级访问另一个班级的变量

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

如果t_space旨在成为 class属性,并且对于所有网格都是相同的,则应这样创建并定义它。如果要用作 instance属性,则需要在每个实例引用t_space到任何地方之前为每个实例定义它。

无论如何,您都需要调用initiate_t_space(t_space_x,t_space_y)来设置网格的t_space,而您并没有这样做。换句话说,您的程序永远不会在insitiate_t_space函数中运行代码。

Read more about classes

本文链接:https://www.f2er.com/1806182.html

大家都在问