我正在尝试制作自己的气泡排序算法用于学习。我通过:
- 创建随机数组
- 检查数组的前两个索引是否需要交换
- 它在整个列表中执行此操作
- 一遍又一遍地循环直到循环结束它不再需要交换任何东西然后循环中断
但是当我在类中打印任何变量时,它说类没有该变量的属性。这是我现在的代码
from random import randint
class bubbleSort:
def __init__(self, size):
self.size = size # Array size
self.array = [] # Random array
self.sorted = self.array # Sorted array
self.random = 0 # Random number
self.count = 0
self.done = False
self.equal = 0
while self.count != self.size:
random = randint(1, self.size)
if random in self.array:
pass
else:
self.array.append(random)
self.count += 1
def sort(self):
while self.done != True:
self.equal = False
for i in range(self.size):
if i == self.size:
pass
else:
if self.sorted[i] > [self.tmp]:
self.equal += 1
if self.equal == self.size:
self.done = True
else:
self.sorted[i], self.sorted[i + 1] = self.sorted[i+1], self.sorted[i]
new = bubbleSort(10)
print(bubbleSort.array)
输出
Traceback (most recent call last):
File "/home/musab/Documents/Sorting Algorithms/Bubble sort.py", line 38, in <module>
print(bubbleSort.array)
AttributeError: type object 'bubbleSort' has no attribute 'array'
在您的示例中,您有一个名为bubbleSort
的类和一个名为new
的该类实例,该实例使用new = bubbleSort(10)
创建。
由于bubbleSort
只引用类本身,它不知道任何特定实例的成员字段(您在类函数中使用self.xyz = abc
创建的字段)。这很好,想象一下有两个实例
b1 = bubbleSort(10)
b2 = bubbleSort(20)
如果你想访问b1
的数组,你需要以某种方式指定它。方法是调用b1.array
。
因此,在您的情况下,您需要print(new.array)
.
bubbleSort
是一个类类型,这个类类型的每个对象都有自己的array
。要访问array
,必须通过类对象来访问。__init__
在创建类对象时被调用。
试一下:
bubbleSortObj = bubbleSort(10) # create a bubbleSort object
print(bubbleSortObj.array) # print the array before sort
bubbleSortObj.sort() # sort the array
print(bubbleSortObj.array) # print the array after sort
指出
- 在
__init__
你有:
self.array = [] # Random array
self.sorted = self.array # Sorted array
在这种情况下,array
和sorted
指向同一个列表,改变一个会改变另一个。要复制列表,一种方法(在许多方法中)是调用sorted = list(array)
- 如果有任何局部函数变量,你可以删除
self
,例如,self.count = 0
可以只是count = 0
,因为它不需要再次使用,也不需要成为类成员