Python运行自定义ConjuntoDeInteiros类报conjunto属性不存在错误如何解决?
问题原因及修复方案
1 核心报错原因
Python中类的构造函数是双下划线包裹的__init__,你当前代码写的是单下划线的_init_,这个方法不会被默认当作构造函数执行,所以实例化ConjuntoDeInteiros对象时,没有执行到self.conjunto = [None] * storage_capacity这行代码,实例自然就没有conjunto属性,调用addElement访问self.conjunto时就抛出了属性不存在的错误。
2 其他潜在错误
- 构造函数定义的第一个参数
conjunto没有被使用,且你实例化对象时没有传这个参数,修正构造方法名称后会直接报参数缺失错误 union方法中你直接把当前对象的conjunto列表和另一个ConjuntoDeInteiros实例相加,列表不能直接和自定义类实例做加法运算,需要取另一个实例的conjunto属性再相加- 初始化时你给
conjunto填充了指定容量的None元素,后续调用append加元素时,新增元素会接在这些None的后面,不符合“集合存储整数”的预期
3 修正后可运行代码
class ConjuntoDeInteiros: # 修正为双下划线__init__,去掉无用的conjunto入参 def __init__(self, storage_capacity=100): self.storage_capacity = storage_capacity # 初始化空列表,而非填充None的列表,避免后续append出现冗余None self.conjunto = [] def addElement(self, intNumber): # 可选:加容量判断避免超出存储上限 if len(self.conjunto) < self.storage_capacity: self.conjunto.append(intNumber) else: print("超出存储容量,无法添加元素") def union(self, instanceOfConjuntoDeInteiros): # 取另一个实例的conjunto属性再做列表相加 return self.conjunto + instanceOfConjuntoDeInteiros.conjunto if __name__ == '__main__': c1 = ConjuntoDeInteiros() c2 = ConjuntoDeInteiros() c1.addElement(10) c2.addElement(5) print(c1.union(c2)) # 输出 [10, 5]
内容的提问来源于stack exchange,提问作者Elisson G. M. Silva
相关产品推荐
相关产品推荐

