Python类属性调用报错:Object1无mu属性的解决方法
解决AttributeError: type object 'Object1' has no attribute 'mu'问题
报错信息
AttributeError: type object 'Object1' has no attribute 'mu'
问题代码
初始代码片段
class Object1: def __init__(self): mu = np.linspace(1.65, 1.8, num = 50) self.mu=mu
完整类代码
import scipy.stats as sts import numpy as np import matplotlib.pyplot as plt import scipy as sp class Object1: def __init__(self): """ 变量与分布定义 返回 ------- None. """ mu = np.linspace(1.65, 1.8, num = 50) self.mu=mu uniform_dist = sts.uniform.pdf(mu) + 1 # 小技巧:为演示清晰使用均匀分布,也可调整beta分布的alpha和beta参数让它完全平坦 self.uniform_dist=uniform_dist beta_dist = sts.beta.pdf(mu, 2, 5, loc = 1.65, scale = 0.2) self.beta_dist =beta_dist def normalization(self,distr): return distr/distr.sum()
错误调用方式
# 直接访问类属性,触发报错 a=Object1.mu # 用getattr访问类属性,同样报错 a=getattr(Object1,'mu')
问题分析
你在__init__方法里通过self.mu定义的是实例属性,这类属性属于类创建出的具体对象,而非类本身。直接用Object1.mu是在访问类的属性,但类本身并未定义mu,因此会抛出属性不存在的错误。
另外调用类中的normalization方法时,必须基于类的实例调用:执行实例.方法(参数)时,Python会自动把实例作为第一个参数传递给方法里的self;如果直接用类.方法(参数)调用,会缺少self参数,导致调用失败。
解决方案
先创建类的实例,再通过实例访问属性和调用方法:
# 创建类的实例 bayesian = Object1() # 通过实例访问属性 uniform_distribution = bayesian.uniform_dist beta_distribution = bayesian.beta_dist # 通过实例调用方法 uniform_dist = bayesian.normalization(uniform_distribution) beta_dist = bayesian.normalization(beta_distribution)
内容的提问来源于stack exchange,提问作者Strovic
相关产品推荐
相关产品推荐

