AttributeError:'numpy.ndarray'对象没有属性'Ea'

2024-05-28 23:29:57 发布

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

我试图实现阿累尼乌斯型定律来计算无量纲的温度相关粘度

我想迭代一系列的活化能(Ea),这是函数的一个参数,以及作为自变量的无量纲温度

代码:

import numpy as np

"""
    define class for Arrhenius viscosity law
    Langemeyer et. al.     Eta_T = b*exp((Ea/(temp +1)) - (Ea/2))
    Where   Eta_T ==> Temperature dependent Viscosity
            Ea    ==> Activation Energy
            t  ==> Non-dimensional temperature 
"""
class ArrVisc(object):
    def __init__(self, Ea):
        self.Ea = Ea
        
    def value(self, t):
        return np.exp((self.Ea/(t+1.))-(self.Ea/2.))
       
    
'''
    Define arrays for valid activation energies and non-dimensional 
    temperature
'''
t = np.linspace(0, 1, 100)
Ea = [20.0, 23.03, 25.35, 29.96, 32.22]

'''   Initialize array for temperature dependent viscosity Eta_T '''

Eta_T = []

"""
    Iterate Class ArrVisc() over activation Ea[]
    and non-dimensional temperature
"""
for i in range(len(Ea)):
    visc = ArrVisc.value(t, Ea[i])
    Eta_T.append(visc)   

错误消息:

AttributeError: 'numpy.ndarray' object has no attribute 'Ea'

Tags: selfnumpyforobjectnp温度classeta
2条回答

您需要创建一个对象:

av = ArrVisc(Ea)
for i in ...:
    visc = av.value(t)
    Eta_T.append(visc)

直接调用ArrVisc.value(...)是不正确的;普通方法是在对象上调用的,而不是直接在类上调用的。如果您确实有应该直接在类上调用的方法,那么应该将它们标记为@classmethod@staticmethod(并且不能访问self,因为在这种情况下没有self

在尝试调用value方法之前,应该首先实例化对象。我建议您将visc的定义更改为以下内容:

visc = ArrVisc(Ea[i]).value(t)

相关问题 更多 >

    热门问题