Python访问类属性quality触发AttributeError如何解决
Python运行抛出
AttributeError: 'TableHeight' object has no attribute 'quality'修复方案 核心报错信息
AttributeError: 'TableHeight' object has no attribute 'quality'
问题根因
两个基础错误导致报错和逻辑不生效:
- 类
__init__构造方法中,传入的quality参数被错误赋值给了实例属性self.viewquality,整个类根本没有定义名为quality的实例属性,后续所有访问.quality的代码都会触发属性不存在错误 - 高度不相等场景下写的
tableone.quality - 10只是做了临时计算,没有把计算结果赋值回属性,完全不会实现“quality减10”的预期逻辑 - 分支代码存在冗余:if和else分支里写了完全相同的
desirability求和代码,没有必要
预期实现逻辑
- 调用合并方法处理两个TableHeight实例时,先计算合并后座位数:两个实例座位数总和减2
- 若两个实例高度不相等,先将第一个实例的quality值减10
- 两个实例的quality值求和得到desirability
- 控制台打印最终的座位数和desirability结果
修复后可运行代码
class TableHeight: def __init__(self, height, quality): self.height = height self.quality = quality self.seats = 4 one = TableHeight(height=74, quality=60) two = TableHeight(height=74, quality=80) three = TableHeight(height=75, quality=75) def tabletocombine(tableone, tabletwo): tableseats = tableone.seats + tabletwo.seats - 2 if tableone.height != tabletwo.height: tableone.quality -= 10 desirability = tableone.quality + tabletwo.quality print(tableseats) print(desirability) tabletocombine(one, two)
运行结果说明
调用tabletocombine(one, two)时,两个实例高度都是74,不会触发减10逻辑,最终输出:
6 140
如果传入高度不等的实例比如tabletocombine(one, three),会先把one的quality减10,最终输出:
6 125
内容的提问来源于stack exchange,提问作者Licheng Zheng
相关产品推荐
相关产品推荐

