Python ABC 模块中的 abstractclass(metaclass=ABCMeta) 和 class abstractclass(ABC) 有什么区别?

What is the difference between abstractclass(metaclass=ABCMeta) and class abstractclass(ABC) in Python ABC module?

我在 Python 中看到了两种定义抽象 类 的方法。

这个:

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

还有这个:

from abc import ABC, abstractmethod
class AbstractClass2(ABC):

它们有什么区别,各自的使用场景是什么?

没有实际的功能差异。 ABC class 只是一个方便 class 来帮助那些不了解 metaclass 概念的人看起来不那么混乱,因为 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 的实现就更清楚了,它只不过是一个空的 class,它指定 ABCMeta 作为它的 metaclass , 只是为了使其后代可以继承类型:

class ABC(metaclass=ABCMeta):
    """Helper class that provides a standard way to create an ABC using
    inheritance.
    """
    __slots__ = ()