You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何报错AttributeError:bubbleSort类无array属性?

问题分析与解决

1. 直接触发报错的原因

你最后一行代码写的是print(bubbleSort.array),这里犯了核心错误:array是实例属性,不是类属性。你已经创建了类的实例new = bubbleSort(10),必须访问实例的属性才能拿到数组,改成:

print(new.array)

类本身(bubbleSort)并没有array属性,只有类的实例(new)才会在初始化时生成这个属性,这就是AttributeError的根源。

2. 冒泡排序逻辑的其他问题

除了上述报错,你的sort方法里还有多处逻辑错误,导致排序无法正常工作:

  • 数组引用混乱:self.sorted = self.array是直接赋值引用,修改self.sorted时会同步改动原self.array,应该改成拷贝:self.sorted = self.array.copy()
  • 索引越界风险:for i in range(self.size)会让i取到self.size-1,此时i+1等于数组长度,超出索引范围,应该改成range(self.size - 1)
  • 未定义变量:代码里self.sorted[i] > [self.tmp]中的self.tmp从未定义,属于完全错误的比较逻辑
  • 排序逻辑颠倒:冒泡排序的规则是左边元素大于右边时交换,你当前的else分支才执行交换,逻辑完全反了
  • 终止条件错误:self.equal初始设为False,后续又用self.equal +=1,类型混乱,应该每次遍历前重置为0,统计无需交换的次数,当次数等于数组长度-1时,说明数组已经有序

修正后的完整代码

from random import randint

class bubbleSort:
    def __init__(self, size):
        self.size = size  # 数组大小
        self.array = []   # 随机生成的原数组
        # 拷贝原数组作为待排序数组,避免修改原数组
        self.sorted = self.array.copy()
        self.count = 0
        
        # 生成不重复的随机数组
        while self.count != self.size:
            random_num = randint(1, self.size)
            if random_num not in self.array:
                self.array.append(random_num)
                self.count += 1

    def sort(self):
        # 重置排序数组(支持重复调用sort方法)
        self.sorted = self.array.copy()
        done = False
        while not done:
            equal_count = 0  # 统计无需交换的次数
            # 遍历到倒数第二个元素,避免i+1越界
            for i in range(self.size - 1):
                if self.sorted[i] > self.sorted[i+1]:
                    # 交换相邻元素
                    self.sorted[i], self.sorted[i+1] = self.sorted[i+1], self.sorted[i]
                else:
                    equal_count += 1
            # 所有相邻元素都无需交换,说明数组有序
            if equal_count == self.size - 1:
                done = True

# 创建实例并测试
new = bubbleSort(10)
print("原数组:", new.array)
new.sort()
print("排序后数组:", new.sorted)

测试说明

运行上述代码后,会先打印生成的随机数组,再输出排序后的结果,同时不会再出现属性错误。

内容的提问来源于stack exchange,提问作者Mus'Ab Al-Bahry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:01:25