类的初始值,python

2024-10-02 00:33:34 发布

您现在位置: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新手,我正在尝试从一些网页上学习)


Tags: 代码selfisdefitxpinitialtm
3条回答

使其成为类属性并计算一次:

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

如果它是一个简单的列表,您可以做一个浅拷贝,如果您不复制您的方法中对xp的任何更改都将反映在任何引用Multipole.xp的地方。如果它包含其他对象,则需要执行copy.deepcopy

向类添加一个init方法,以便每个实例都有自己的xp值,两个方法都将使用该值。在

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

然后在需要xp的地方使用xp = self.xp[:]。在

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

您可以将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

相关问题 更多 >

    热门问题