在类的__init__函数中定义numpy.array
我对在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
的输入参数设置成下面这些:
>>> Xpos.value
array(235.0)
>>> type(Xpos.value)
<type 'numpy.ndarray'>
>>> Ypos.value
array(340.0)
omega_matter=0.23;omega_lambda=0.77
然后当我尝试用这些输入来调用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,才能避免出现这个错误信息呢?
1 个回答
1
你在 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)
所以当 init 完成后,你的 self.halo_pos.x 和 self.halo_pos.y 的声明就被清理掉了。