2015-02-23 23 views
1

我写了一个模拟代码,我想为我的代码插入初始值。类的初始值,python

some def are here, 

class multipole: 

    def q(self, f1,f2,f3): 
     t=0. 
     tm=0. 
     xp = idistribution(j,m) # initial xp values it is a list of particles velocities 
     while t< k: 
      rk(t,m,f1,f2,f3,xp) # calculate new xp value 
      xp.append(xxp[1]) 
     return xp 

    def h(self, f1,f2,f3): 
     t=0. 
     tm=0. 
     xp = idistribution(j,m) # initial xp values it is a list of particles velocities 
     while t< k: 
      rk(t,m,f1,f2,f3,xp) # calculate new xp value 
      xp.append(xxp[1]) 
     return xp 
if __name__ == "__main__": 
    qp=multipole() 
    quxp=qp.q(0.,0.,0.) 
    hxp=qp.h(0.052,0.,0.) 

我的问题是,当我打电话XP = IDIST(J,M),它会返回随机分布离子的速度,但我想用两个类的方法(Q和h)我怎么能做到这一点相同的分布?提前致谢。 (我在蟒蛇新,我试图从一些网页了解它)

回答

1

使它成为一个类属性,一旦计算的话:

class Multipole: 
    xp = idistribution(j,m) 
    def q(self, f1,f2,f3): 
     t=0. 
     tm=0. 
     xp = Multipole.xp[:] 

如果它是一个平坦的列表,你可以做一个浅复制,如果您不复制xp中的任何更改,您的方法将反映在任何有Multipole.xp的引用。如果包含其他对象,你需要做一个copy.deepcopy

0

你可以在xp传递作为附加参数qh

class multipole: 
    def q(self, f1, f2, f3, xp): 
    .... 
    def h(self, f1, f2, f3, xp): 
    .... 

if __name__ == "__main__": 
    xp = idistribution(j,m) 
    xp1 = xp[:] # copy, so that xp stays untouched 
    xp2 = xp[:] # copy, so that xp stays untouched 
    qp=multipole() 
    quxp=qp.q(0. , 0., 0., xp1) 
    hxp=qp.h(0.052, 0., 0., xp2) 

    # xp1 and xp2 now contains your results 
0

添加init方法的类,这样每个实例都会有它自己的值为xp,这两种方法都会使用它。

class Multipole: 
    def __init___(self): 
     self.xp = idistribution(j,m) 
    #rest of code 

然后使用xp = self.xp[:]无论你需要xp。

这会让您让每个Multipole实例使用不同的分布,但对给定实例上的两个方法的调用将使用相同的分布。