python - 访问另一个类中的一个类的变量
问题描述
我仍在做与我之前尝试模拟粒子扩散的问题相同的项目。我之前的问题与此无关,除了仍在尝试模拟扩散。我正处于尝试在网格内启动不同扩散区域的阶段,所以我有一个函数可以生成一个列表(坐标)列表,可以在每个移动步骤检查粒子的坐标以调整概率运动,以及扩散性。
我正在使用 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() 的变量。
任何帮助将不胜感激。
解决方案
您的变量不是类属性,而是实例属性。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
函数中运行代码。
推荐阅读
- go - http.Client 和 goroutines 的不可预测的结果
- validation - Sequelize 验证 - 是否可以按属性/字段对 Sequelize 组错误进行处理?
- swift - Firebase 中的“‘StorageReference’类型的值没有成员‘数据’”
- r - R中的I型错误模拟
- p2p - 在 P2P 网络上保持统一时间
- c# - 从 TokenValidatedContext 获取控制器实例(Net Core,JwtBearerMiddleware)
- css - css3 flex:如何创建 2 列:100% + 固定宽度?
- javascript - Express.JS API 与 Node.JS 应用程序问题
- javascript - JavaScript switch 语句未执行案例 1
- java - JPQL 表名未映射