抽象在这种情况下意味着什么?

时间:2009-11-22 17:36:53

标签: python abstract

我需要一些帮助来理解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的{​​{1}}部分,但我不知道h(...)的含义,因此无法理解问题所在。

4 个答案:

答案 0 :(得分:10)

这是一个描述here的技巧。 Python中没有关键字abstract,因此,如果您不在某个子类中重写此方法,则会导致NotImplementedError

答案 1 :(得分:5)

抽象方法是一个类没有实现的方法,使它成为一个抽象类;子类必须覆盖所有抽象方法(即,提供具体实现)为具体类,即可以为其创建实例的类。 Python中表达“此方法是抽象的”的常规方法是使方法的主体为raise NotImplementedError

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

因此,正式地说,您需要对此进行子类化并实现标记为“abstract”的两个方法。 (根据你的TA的提示,他或她实际上可能意味着你应该用一个代码的工作代替“abstract”这个词,但这对于OOP中“abstract”的正常含义来说是相当有意义的! - )

答案 2 :(得分:1)

抽象函数是一个没有实现的函数。它是一个占位符,只是在那里填写类合同,以便您知道子类应该提供什么方法​​。您需要做的是创建TilePuzzleProblem的后代并填写您自己的h实现。如果您想按原样运行它,请创建一个后代并使h不执行任何操作。

答案 3 :(得分:0)

Abstract表示必须继承该类。抽象或“基础”类提供了一个可以通过继承扩展的基类型。您无法实例化抽象类,只能实例化继承它的类。

有关详细信息,请参阅this Wikipedia article

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

相关问题