抽象类元类=ABCMeta和抽象类ABC之间的区别

问题描述

我见过两种在 python 中定义抽象类的方法。有什么区别,各自的使用场景是什么?

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

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

解决方法

没有实际的功能差异。 ABC 类只是一个方便的类,可帮助那些不太了解元类概念的人使代码看起来不那么混乱,如 documentation 所述:

以 ABCMeta 作为元类的辅助类。有了这个班级, 可以通过简单地从 ABC 派生来创建抽象基类 避免有时混淆元类的用法

看一下abc.py的实现就更清楚了,它只不过是一个空类,指定了ABCMeta作为它的元类,这样它的后代就可以继承该类型:

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