Python 在这种情况下,抽象是什么意思?
我需要一些帮助来理解python的概念Python 在这种情况下,抽象是什么意思?,python,abstract,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,
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
目前代码挂起在函数
h(…)
的abstract
部分,但我不知道abstract
是什么意思,因此无法理解问题所在。abstract意味着必须继承类。抽象类或“基类”提供了一个可以通过继承进行扩展的基类类型。不能实例化抽象类,只能实例化继承抽象类的类
有关更多信息,请参阅
您想要使用抽象基类的一个原因是,如果您想要对子类型进行分类或分组。例如,
Car
、Truck
和Plane
都将从Vehicle
抽象基类继承。你不能只是实例化一辆“汽车”,你必须实例化一辆汽车、卡车或飞机。抽象保护它不被实例化。抽象函数是没有实现的函数。它是一个占位符,只是用来填写类契约,以便您知道子类应该提供什么方法。这里需要做的是创建TilePuzzleProblem
的后代,并填写自己的h
实现。如果您想按原样运行它,请创建一个子体,并使您的h
什么都不做。抽象方法是类不实现的方法,使其成为抽象类;子类必须覆盖所有抽象方法(即,提供具体的实现),使其成为具体的类,即,可以为其创建实例的类。Python中表达“此方法是抽象的”的通常方式是将方法体设置为raisenotimplementederror
有关一般概念的更多信息,以及Python中的细节,请参见
因此,在形式上,您需要将其子类化,并实现标记为“抽象”的这两个方法。(根据助教的提示,他或她可能实际上意味着你应该用一个工作的代码体替换“抽象”一词,但这与OOP中“抽象”的正常含义相比是一个相当大的延伸!-)。这是一个描述的技巧。Python中没有关键字
abstract
,因此,如果不在某个子类中重写此方法,将导致NotImplementedError
谢谢你的快速回答!为什么有人会使用抽象类?我在试图理解它存在的原因。。。。。。在OP的示例代码中,abstract
只是人们查看它的一个标记,这里缺少了一些东西(真正的实现)。还有,可以有抽象函数吗?为什么要使用抽象类:想象一个Shape类。一些可能的方法可能是GetArea、getPermission等。但是,除非您知道要处理的是哪种形状,否则实现这些方法是不可能的。因此,它们在基本形状类中是抽象的,并在子类(矩形、三角形等)中实现。查看OOP上的wikipedia条目。在Python2.6中,模块集合中有许多抽象基类(ABC),例如集合。MutableSet
——ABC定义了许多特定的集合操作,但您必须自己为集合的内部存储子类化并实现原语。实际上,NameError
。我想这个把戏可能是我这一周看到的最糟糕的主意。是的,这是一个糟糕的做法。实际上,您应该在需要重写的方法中引发NotImplementedError
错误。这让我成为一只悲伤的(编程)熊猫。另外,不要混淆堆栈溢出会突出显示抽象
,就好像它是一个关键字一样。这样使用的系统必须适应多种编程语言,在许多情况下,抽象是一个关键词。但不是用Python。