是为了记住你自己和你的团队来正确地实现这个课程吗?
我不能完全使用这样的抽象类:
class RectangularRoom(object):
def __init__(self, width, height):
raise NotImplementedError
def cleanTileAtPosition(self, pos):
raise NotImplementedError
def isTileCleaned(self, m, n):
raise NotImplementedError
Tags:
作为Uriel says,它是指应该在子类中实现的抽象类中的方法,但也可以用于指示TODO。
对于第一个用例有一个替代方案:Abstract Base Classes。这些有助于创建抽象类。
下面是Python3示例:
当实例化
C
时,会得到一个错误,因为my_abstract_method
是抽象的。您需要在子类中实现它。子类
C
并实现my_abstract_method
。现在您可以实例化
D
。C.my_abstract_method
不必为空。它可以使用super()
从D
调用。与
NotImplementedError
相比,这种方法的一个优点是在实例化时而不是方法调用时获得显式的Exception
。想想如果是:
你给它子类化,却忘了告诉它如何
isTileCleaned()
,或者更可能的是,把它打成isTileCLeaned()
。然后在您的代码中,当您调用它时,您将得到一个None
。None
输出是否有效?谁知道呢。raise NotImplmentedError
强制您实现它,因为它会在您尝试运行它时抛出异常,直到您这样做为止。这消除了许多无声的错误。这类似于为什么a bare except is almost never a good idea:因为人们会犯错误,这确保了他们不会被扫地出门。注意:如其他答案所述,使用抽象基类更好,因为这样错误会被前加载,并且程序在您实现它们之前不会运行(对于NotImplementedError,只有在实际调用时才会抛出异常)。
如文档所述[docs]
注意,尽管这个错误的主要用例是应该在继承类上实现的抽象方法的指示,但是您可以随意使用它,比如指示
TODO
标记。相关问题 更多 >
编程相关推荐