java - Python 相当于 Java 抽象类吗?

标签 java python abstract-class abstraction

我有一些 Java 编码经验,但现在我发现自己被迫使用 Python 编码。我想做的是开发一个从抽象类 Document 扩展到多种文档类型的类结构,这些文档类型将根据其类型从数据库中检索不同的信息。由于可能至少有一百种不同的文档类型,因此我认为使用抽象来在结构中进一步卸载尽可能多的代码是我的最佳选择。

在Java中,我会写这样的东西:

public abstract class Document(){
    private String department
    private String date
    ...
    public Document(){
    ...}
    public abstract String writeDescription(){
    ...}
}

在Python中,我不太确定做这样的事情的最佳选择是什么。目前,我看到的两种主要可能性是使用 abc 插件( https://docs.python.org/2/library/abc.html ),或者简单地使用基本的 Python 继承结构,如下所示: Abstraction in Python?

如果没有这个 abc 插件,我可以完成我需要的事情吗?还是有必要做我想做的事情?

最佳答案

在 Java 中使用这种严格结构的优点是,您可以在编译时检查子类是否履行其 ABC 定义的契约。您仍然可以在 python 中使用继承和多态性,但您无法免费获得任何静态检查。

我要做的就是在 vanilla python 中定义一个 ABC,并使用方法 stub 来实现您希望所有文档都支持的功能。

class Document(object):
    def __init__(self):
        pass  # do stuff

    def getDescription(self):
        raise NotImplementedError("getDescription() in Document is not implemented")

class DocumentImpl(Document)
    def __init__(self):
        super(DocumentImpl, self).__init__()

    def getDescription(self):
        return "this is a document impl"

关于java - Python 相当于 Java 抽象类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24083409/

相关文章:

java - spring boot应用kafka pipeline报错 "Connection to node -1 could not be established. Broker may not be available."

java - 如何使用 IContentAssist 处理器在自动完成中显示弹出的附加信息

java - 重构未嵌套的条件语句

python - Tensorflow session 返回为 'closed'

Python 2.6、3 抽象基类的误解

java - Java中抽象类的目的是什么?

java - 在相对布局中动态添加 Imageview 后,图像不会调整大小

python - 属性错误: module 'pip._internal.download' has no attribute 'HTTPAdapter'

python - 使用 Python turtle 制作没有 circle 函数的圆

c# - 编写内联抽象类的 C# 实现?