class的初始值,python

时间:2015-02-23 14:55:10

标签: 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)使用相同的分布,我该怎么做?提前致谢。 (我是python的新手,我试图从一些网页上学习它)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

在类中添加一个init方法,以便每个实例都有xp的值,两个方法都会使用它。

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

然后在任何需要xp。

的地方使用xp = self.xp[:]

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