我的对象显然没有属性 'cargo'
My object apparently has no attribute 'cargo'
我是python/programming新手,正在自学python。不幸的是我真的卡住了!我在 "How to Think Like a Computer Scientist" 的第 19 章。
这里的目标是使用链表编写优先队列 ADT 的实现。
我在第 22 行和第 32 行收到一个错误。我对这个错误的理解是我的一个或多个节点对象没有属性 "cargo"。我不明白这一点,因为我的所有节点对象在创建时都被分配了 "None" 或某个数字的货物。节点对象按照书上给出的写法
我应该提一下,第 31 行运行良好。我只有在添加 LINE 32 时遇到问题,它调用 LINE 22(这显然是问题所在)我得到一个错误。
任何见解都会有所帮助。非常感谢!!!
我在较小的范围内重现了这个问题:
class Node:
def __init__(self, cargo= None, next = None):
self.cargo = cargo
self.next = next
class Priority_Queue_For_Linked():
def __init__ (self):
self.max = None
self.nextmax = None
self.min = None
self.length = 0
def insert (self, cargo):
node = Node(cargo)
if self.length == 0:
node = self.max = self.min
self.length = 1
return
if node.cargo > self.max.cargo: # <--LINE 22
notmaxanymore = self.max
notmaxanymore.next = node
node = self.max
self.nextmax = notmaxanymore
self.length += 1
return
testlist = Priority_Queue_For_Linked()
testlist.insert(12)
testlist.insert(22) # <--LINE 32
这里是错误:
=== RESTART: /Users/Desktop/Programming Career/Untitled6.py ===
Traceback (most recent call last):
File "/Users/Desktop/Programming Career/Untitled6.py", line 31, in <module>
testlist.insert(22)# <--line 32
File "/Users/Desktop/Programming Career/Untitled6.py", line 21, in insert
if node.cargo > self.max.cargo:# <--line 22
AttributeError: 'NoneType' object has no attribute 'cargo'
我怀疑您是否需要更多上下文,但如果有帮助,这里是所有代码:
class Node:
def __init__(self, cargo= None, next = None):
self.cargo = cargo
self.next = next
def __str__(self):
return str(self.cargo)
def print_backward (self):
if self.next != None:
tail = self.next
tail.print_backward()
print self.cargo,
def print_list(node):
while node:
print node,
node = node.next
print
class Priority_Queue_For_Linked():
def __init__ (self):
self.max = None
self.nextmax = None
self.min = None
self.length = 0
def is_empty (self):
if self.length == 0:
print "List is empty."
def insert (self, cargo):
node = Node(cargo)
if self.length == 0:
node = self.max = self.min
self.length = 1
return
if node.cargo > self.max.cargo:########40
notmaxanymore = self.max
notmaxanymore.next = node
node = self.max
self.nextmax = notmaxanymore
self.length += 1
return
if node.cargo < self.min.cargo:
notminanymore = self.min
node.next = notminanymore
node = self.min
self.length += 1
return
else:
comparisonnode = self.min.next
comparisonprev = self.min
for i in range (2, self.length):
if node.cargo < comparisonnode.cargo:
node.next = comparisonnode
comparisonprev.next = node
self.length += 1
break
comparisonnode = comparisonnode.next
comparisonprev = comparisonprev.next
def remove (self):
maxtoremove = self.max
self.max = self.nextmax
self.max.next = None
length -=1
return maxtoremove.cargo
def print_list(self):
tempnode = self.min
print "[",
while not tempnode == None:
print tempnode,
tempnode = tempnode.next
print "]"
testlist = Priority_Queue_For_Linked()
testlist.insert(12)
testlist.insert(22)#######86
Priority_Queue_For_Linked class 的 max
属性在 __init__
方法中定义为 None ,并且在 if 语句之前没有更改.
我假设您打算在某个时候将节点指定为该属性的值,但您没有这样做。
您的代码尝试执行 self.max.cargo
。在您的 __init__
中,您将 self.max
设置为 None,并且您永远不会在其他任何地方更改此值,因此 self.max
是 None。如果你想能够使用self.max
,你需要在某个时候将它设置为一个真实的节点值。
当您插入第一个项目时,您的作业出现问题:
if self.length == 0:
node = self.max = self.min
self.length = 1
return
这不会改变 self.max
或 self.min
的值,它们将保持 None
,当然不会有 cargo
。您还会丢失要添加的节点。我假设你想这样做:
self.max = self.min = node
我是python/programming新手,正在自学python。不幸的是我真的卡住了!我在 "How to Think Like a Computer Scientist" 的第 19 章。 这里的目标是使用链表编写优先队列 ADT 的实现。
我在第 22 行和第 32 行收到一个错误。我对这个错误的理解是我的一个或多个节点对象没有属性 "cargo"。我不明白这一点,因为我的所有节点对象在创建时都被分配了 "None" 或某个数字的货物。节点对象按照书上给出的写法
我应该提一下,第 31 行运行良好。我只有在添加 LINE 32 时遇到问题,它调用 LINE 22(这显然是问题所在)我得到一个错误。
任何见解都会有所帮助。非常感谢!!!
我在较小的范围内重现了这个问题:
class Node:
def __init__(self, cargo= None, next = None):
self.cargo = cargo
self.next = next
class Priority_Queue_For_Linked():
def __init__ (self):
self.max = None
self.nextmax = None
self.min = None
self.length = 0
def insert (self, cargo):
node = Node(cargo)
if self.length == 0:
node = self.max = self.min
self.length = 1
return
if node.cargo > self.max.cargo: # <--LINE 22
notmaxanymore = self.max
notmaxanymore.next = node
node = self.max
self.nextmax = notmaxanymore
self.length += 1
return
testlist = Priority_Queue_For_Linked()
testlist.insert(12)
testlist.insert(22) # <--LINE 32
这里是错误:
=== RESTART: /Users/Desktop/Programming Career/Untitled6.py ===
Traceback (most recent call last):
File "/Users/Desktop/Programming Career/Untitled6.py", line 31, in <module>
testlist.insert(22)# <--line 32
File "/Users/Desktop/Programming Career/Untitled6.py", line 21, in insert
if node.cargo > self.max.cargo:# <--line 22
AttributeError: 'NoneType' object has no attribute 'cargo'
我怀疑您是否需要更多上下文,但如果有帮助,这里是所有代码:
class Node:
def __init__(self, cargo= None, next = None):
self.cargo = cargo
self.next = next
def __str__(self):
return str(self.cargo)
def print_backward (self):
if self.next != None:
tail = self.next
tail.print_backward()
print self.cargo,
def print_list(node):
while node:
print node,
node = node.next
print
class Priority_Queue_For_Linked():
def __init__ (self):
self.max = None
self.nextmax = None
self.min = None
self.length = 0
def is_empty (self):
if self.length == 0:
print "List is empty."
def insert (self, cargo):
node = Node(cargo)
if self.length == 0:
node = self.max = self.min
self.length = 1
return
if node.cargo > self.max.cargo:########40
notmaxanymore = self.max
notmaxanymore.next = node
node = self.max
self.nextmax = notmaxanymore
self.length += 1
return
if node.cargo < self.min.cargo:
notminanymore = self.min
node.next = notminanymore
node = self.min
self.length += 1
return
else:
comparisonnode = self.min.next
comparisonprev = self.min
for i in range (2, self.length):
if node.cargo < comparisonnode.cargo:
node.next = comparisonnode
comparisonprev.next = node
self.length += 1
break
comparisonnode = comparisonnode.next
comparisonprev = comparisonprev.next
def remove (self):
maxtoremove = self.max
self.max = self.nextmax
self.max.next = None
length -=1
return maxtoremove.cargo
def print_list(self):
tempnode = self.min
print "[",
while not tempnode == None:
print tempnode,
tempnode = tempnode.next
print "]"
testlist = Priority_Queue_For_Linked()
testlist.insert(12)
testlist.insert(22)#######86
Priority_Queue_For_Linked class 的 max
属性在 __init__
方法中定义为 None ,并且在 if 语句之前没有更改.
我假设您打算在某个时候将节点指定为该属性的值,但您没有这样做。
您的代码尝试执行 self.max.cargo
。在您的 __init__
中,您将 self.max
设置为 None,并且您永远不会在其他任何地方更改此值,因此 self.max
是 None。如果你想能够使用self.max
,你需要在某个时候将它设置为一个真实的节点值。
当您插入第一个项目时,您的作业出现问题:
if self.length == 0:
node = self.max = self.min
self.length = 1
return
这不会改变 self.max
或 self.min
的值,它们将保持 None
,当然不会有 cargo
。您还会丢失要添加的节点。我假设你想这样做:
self.max = self.min = node