我仍在做与上一个问题相同的项目,该项目试图模拟粒子扩散。我的上一个问题与此无关,除了仍然试图模拟扩散。我正处于尝试在网格内启动不同扩散率区域的阶段,因此我具有一个生成列表(坐标)列表的功能,可以在每个移动步骤中对照粒子的坐标对其进行检查,以调整概率的运动,以及扩散性。
我正在使用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,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()中进行计算。
任何帮助将不胜感激。
答案 0 :(得分:1)
您的变量不是类属性,而是实例属性。 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
函数中运行代码。