当前位置: 首页 > 面试题库 >

我应该在Python中的抽象方法主体中添加什么

司空镜
2023-03-14
问题内容

说我有以下抽象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类型的数据,甚至有相同的细节,如名称和价格。