python - 抽象类(元类=ABCMeta)和抽象类(ABC)之间的区别

标签 python python-3.x abstract-class abc

我在 python 中看到了两种定义抽象类的方法.有什么区别,分别有哪些使用场景?

from abc import ABCMeta, abstractmethod
class AbstactClass(metaclass = ABCMeta):
from abc import ABC, abstractmethod
class AbstractClass2(ABC):

最佳答案

没有实际的功能差异。 ABC class 只是一个方便的类,以帮助那些不太了解元类概念的人使代码看起来不那么困惑,如 documentation状态:

A helper class that has ABCMeta as its metaclass. With this class, an abstract base class can be created by simply deriving from ABC avoiding sometimes confusing metaclass usage


如果你看一下 abc.py 的实现就更清楚了,它只不过是一个指定 ABCMeta 的空类作为它的元类,只是为了它的后代可以继承类型:
class ABC(metaclass=ABCMeta):
    """Helper class that provides a standard way to create an ABC using
    inheritance.
    """
    __slots__ = ()

关于python - 抽象类(元类=ABCMeta)和抽象类(ABC)之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68569239/

相关文章:

python - os.close(0) 和 sys.stdin.close() 的区别

python - 使用 Python 为特定行创建具有多列的 HTML 表

python循环回到for循环中的前一个元素

.net - 抽象类 : Which exception should I throw when child classes aren't implemented correctly?

java - 从泛型类型参数(类型变量)扩展的类?

java - 在它的抽象父类(super class)中使用子类的泛型类型?

python - 在 python 中,如何扫描一个长行的文本文件并将项目分成不同的列?

python - Odoo 10 从自定义模型转到购买列表

python - 如何在 SQLAlchemy 中过滤列上的 SQL 查询?

python - Ftplib ConnectionRefusedError : [Errno 111] Connection refused (python 3. 5)