我需要一些帮助来理解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(...)
的含义,因此无法理解问题所在。
答案 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。
您想要使用抽象基类的一个原因是您要对子类型进行分类或分组。例如,Car
,Truck
和Plane
都将从Vehicle
抽象基类继承。你不能只是实例化一个“车辆”,你必须实例化汽车,卡车或飞机。抽象可以防止它被实例化。