为什么我的程序会抛出 python 属性错误?



Python新手在这里尝试为煎饼搜索算法编写A*搜索算法。但是,我的构造函数抛出了一个"煎饼"对象,该对象在某些函数中没有属性"numPancakes",而其他函数也使用它。出了什么问题? 下面的打印功能不会引发问题。

class Pancakes:
def __init__(self, stack, backwardCost): 
print("Constructor called")
self.backwardCost = backwardCost
self.forwardCost = self.calculateForwardCost()
self.numPancakes = len(stack) - 1
self.pancakeStack = stack
self.total =  self.calculateForwardCost() + self.backwardCost

def print(self):
stackState = "Stack: "
for i in range((self.numPancakes)):
stackState += str(self.pancakeStack[i]) + " "
print(stackState)

一旦我尝试使用

def calculateForwardCost(self):
forwardCost = 0
for i in range(self.numPancakes):
gap = self.pancakeStack[index] - self.pancakeStack[index + 1]
if gap < -1 or gap > 1:
forwardCost += 1
return forwardCost

节目说

File "aStar.py", line 8, in __init__
self.forwardCost = self.calculateForwardCost()
File "aStar.py", line 22, in calculateForwardCost
for i in range(self.numPancakes):
AttributeError: 'Pancakes' object has no attribute 'numPancakes'

查看构造函数中内容的顺序:

self.forwardCost = self.calculateForwardCost()  # Requires self.numPancakes
self.numPancakes = len(stack) - 1  # But self.numPancakes isn't set until here

您正在尝试在分配之前使用self.numPancakes。只需交换这些行以确保首先设置numPancakes

self.numPancakes = len(stack) - 1
self.forwardCost = self.calculateForwardCost()

实际上,我正在再次阅读您的代码,并且在分配之前也正在使用pancakeStack代码。在调用该函数之前,需要分配calculateForwardCost内部所需的每个属性。

最新更新