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

2024-09-28 22:49:01 发布

您现在位置:Python中文网/ 问答频道 /正文

Python新手在这里尝试着为pancake搜索算法编写一个A*搜索算法。但是,我的构造函数抛出的“Pancakes”对象在某些函数中没有属性“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'

Tags: inselfforstackdefrangeprintgap
1条回答
网友
1楼 · 发布于 2024-09-28 22:49:01

看看构造器中东西的顺序:

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函数之前,需要分配calculateForwardCost中所需的每个属性

相关问题 更多 >