说我有以下抽象类Foo
:
import abc
class Foo(abc.ABC):
@abc.abstractmethod
def bar(self):
raise NotImplementedError
我应该在bar
方法主体中添加什么?
我看到了很多具有的代码raise NotImplementedError
,如上所示。但是,这似乎是多余的,因为任何未实现的子类在实例化时bar
都会引发TypeError: Can't instantiate abstract class Foo with abstract methods bar
。
是否bar
留空为Pythonic ,如下所示:
import abc
class Foo(abc.ABC):
@abc.abstractmethod
def bar(self):
...
这是Python文档中有关Abstract Base
Classes的内容
,但是我不确定这只是占位符还是实际的代码编写示例。
如果可以bar
只留下三个点(...
),我应该何时使用NotImplementedError
?
该文档的目的是为您提供示例。您不必遵循它。
您可以提供默认值;子类仍然可以自由使用super()
来调用您的实现。大多数collections.abc
课程都是这样做的。参见源代码。
Size
例如,返回0
为__len__
:
class Sized(metaclass=ABCMeta):
# ...
@abstractmethod
def __len__(self):
return 0
问题内容: 在Java中重写非虚拟方法时,建议使用批注,但是如果我实现抽象方法怎么办?我也应该使用吗? 问题答案: 在这种情况下,我倾向于使用,以便在超类发生更改(完全删除方法或更改其签名等)时在子类中标记该方法。 唯一真正的区别是,如果没有注释,则如果更改或删除了超类/接口中的方法,则所讨论的实现将变成该类的“常规”方法。因此,如果仅为了履行合同而实施方法,则应添加注释。如果该方法在您的类中是有
问题内容: 我在将继承与Python结合使用时遇到麻烦。尽管对于Java而言,这个概念对我来说似乎太容易了,但到目前为止,我仍然无法用Python理解,这至少令我惊讶。 我有一个原型如下: 在上面的代码中,我如何才能创建一个需要为所有子类实现的抽象方法? 问题答案: 遵循这些思路,使用ABC 另请阅读此优秀教程:http : //www.doughellmann.com/PyMOTW/abc/ 您
我知道抽象类可能包含抽象和具体方法(即主体实现)。我的问题是:子类可以从抽象超类继承/覆盖具体方法吗?其次,它们必须以实现抽象方法的方式实现具体方法吗?
我想在IntelliJ中运行我的第一个程序,但我不能在添加配置部分截图中添加我的主类 确定按钮不起作用
我曾尝试将Laravel4.2应用程序迁移到Laravel5.0,之前在Laravel4.2中,您有一个BaseController,您创建的其他控制器可以扩展它,这意味着如果我在其中添加一个方法。其他控制器将扩展BaseController可以使用它。 现在在Laravel5.0上,他们以某种方式更改了它,而不是使用类,而是使用了一个抽象类 现在我不熟悉抽象类是什么,所以我的主要音乐会是我仍然能
我需要做一个方法,可以添加这些数据类型到一个arraylist内的cart类。但如果我写 它只会接收推车类型的数据,所以我不能输入食物或饮料,或Miscs类型的数据,甚至有相同的细节,如名称和价格。