首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AttributeError:“”numpy.ndarray“”对象没有属性“”Ea“”

AttributeError:“”numpy.ndarray“”对象没有属性“”Ea“”
EN

Stack Overflow用户
提问于 2020-12-15 11:40:42
回答 2查看 54关注 0票数 0

我正在尝试实现一个Arrhenius类型的定律来计算一个无量纲的温度相关粘度。

我想要迭代一系列的激活能(Ea),它是函数的一个参数,和无量纲温度,它是自变量。

代码:

代码语言:javascript
复制
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)   

错误消息:

代码语言:javascript
复制
AttributeError: 'numpy.ndarray' object has no attribute 'Ea'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-15 11:45:50

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

代码语言:javascript
复制
visc = ArrVisc(Ea[i]).value(t)
票数 0
EN

Stack Overflow用户

发布于 2020-12-15 11:46:02

您需要创建一个对象:

代码语言:javascript
复制
av = ArrVisc(Ea)
for i in ...:
    visc = av.value(t)
    Eta_T.append(visc)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65299681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档