定义数字阵列在类的函数中

2024-09-27 21:30:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我不太熟悉用python编写,我正在尝试为我的应用程序修改一个编写的类。问题是我想给halo_pos参数作为以下NFW类的输入:

class NFW(object):
    _req_params = { 'mass' : float , 'conc' : float , 'redshift' : float }
    _opt_params = { 'halo_pos' :[float,float]  , 'omega_m' : float , 'omega_lam' : float }
    _single_params = []
    _takes_rng = False
    _takes_logger = False

    def __init__(self, mass, conc, redshift, halo_pos, 
                 omega_m=None, omega_lam=None, cosmo=None):
        self.M = float(mass)
        self.c = float(conc)
        self.z = float(redshift)
        self.halo_pos.x = float(halo_pos[0])
        self.halo_pos.y = float(halo_pos[1])  
        self.cosmo = cosmo

如果我为以下参数传递halo_pos的输入

^{pr2}$

然后,当我尝试用给定的输入调用NFW类时,我得到以下错误消息:

nfw = nfw_halo.NFWHalo(mass=M,conc=concentration,redshift=z_halo,halo_pos=[Xpos,Ypos],omega_m=omega_matter,omega_lam=omega_lambda)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "nfw_halo.py", line 156, in __init__
    self.halo_pos.x = float(halo_pos[0])
AttributeError: 'NFWHalo' object has no attribute 'halo_pos'

我应该如何为我的类定义halo_pos以避免引发错误消息?在


Tags: posselfnoneredshiftobjectparamsfloatmass
1条回答
网友
1楼 · 发布于 2024-09-27 21:30:54

您没有声明在init部分中分配的halo_pos变量。在

class NFW(object):
    _req_params = { 'mass' : float , 'conc' : float , 'redshift' : float }
    _opt_params = { 'halo_pos' :[float,float]  , 'omega_m' : float , 'omega_lam' : float }
    _single_params = []
    _takes_rng = False
    _takes_logger = False
    halo_pos = None

    def __init__(self, mass, conc, redshift, halo_pos, 
                 omega_m=None, omega_lam=None, cosmo=None):
        self.M = float(mass)
        self.c = float(conc)
        self.z = float(redshift)
        self.halo_pos = halo_positions(halo_pos)
        self.cosmo = cosmo

        print(str(self.halo_pos.x),str(self.halo_pos.y))

class halo_positions(object):
    x = None
    y = None
    def __init__(self,positions):
        self.x = positions[0]
        self.y = positions[1]

if __name__ == '__main__':
    nfw = NFW(mass=1.23,conc=2.34,redshift=3.45,halo_pos=[4.56,5.67],omega_m=1.111,omega_lam=1.222)

所以你的声明自我光环.x和自我光环.y一旦init完成就被清理。在

相关问题 更多 >

    热门问题