2015-02-23 52 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實例使用不同的分佈,但對給定實例上的兩個方法的調用將使用相同的分佈。