3

我需要一些帮助来理解 python 概念。

class TilePuzzleProblem(search.Problem):
""" This class is the class for the NxN - blanks tile puzzle problem """

    def __init__(self, N, blanks, initial, goal):
        """ Initialize """
        search.Problem.__init__(self, initial, goal)
        self.N = N
        self.blanks = blanks

    def successor(self, state):
        """ Generate the successors of the given state. Returns a list of (move, successor) pairs"""
        abstract

    def h(self, node):
        abstract

目前代码挂在abstract函数的一部分h(...),但我不知道是什么abstract意思,因此无法理解问题所在。

4

4 回答 4

11

This is a trick described here. There's not keyword abstract in Python, so, if you won't override this method in some subclass, it'll cause NotImplementedError.

于 2009-11-22T17:46:03.783 回答
5

抽象方法是类未实现的方法,使其成为抽象类;子类必须覆盖所有抽象方法(即提供具体实现)成为具体类,即您可以为其创建实例的类。Python 中表达“这个方法是抽象的”的正常方式是让方法的主体为raise NotImplementedError.

有关一般概念的更多信息,除了 Python 中的细节之外,请参阅wikipedia

因此,正式地,您需要对其进行子类化并实现这两个标记为“抽象”的方法。(根据您的 TA 的提示,他或她实际上可能意味着您应该将“抽象”一词替换为可工作的代码体,但相对于 OOP 中“抽象”的正常含义而言,这将是相当大的延伸!-) .

于 2009-11-22T17:44:03.710 回答
1

抽象函数是没有实现的函数。它是一个占位符,只是用来填写类契约,以便您知道子类应该提供哪些方法。您需要在此处创建一个后代TilePuzzleProblem并填写您自己的h. 如果您想按原样运行它,请创建一个后代并让您h什么都不做。

于 2009-11-22T17:41:00.050 回答
0

抽象意味着类必须被继承。抽象或“基”类提供了可以通过继承扩展的基类型。您不能实例化抽象类,只能实例化继承它的类。

有关更多信息,请参阅此 Wikipedia 文章

您想要使用抽象基类的一个原因是您想要对子类型进行分类或分组。例如CarTruckPlane都继承自Vehicle抽象基类。您不能只实例化“车辆”,您必须实例化汽车、卡车或飞机。抽象可以保护它不被实例化。

于 2009-11-22T17:39:18.260 回答